Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Формула для преобразования числа в дату - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Формула для преобразования числа в дату
Serge_007 Дата: Пятница, 16.11.2012, 13:53 | Сообщение № 21
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (MCH)
ты правишь свои посты без отметки об исправлении.

Да, у меня и модераторов эта отметка по умолчанию не ставится

Quote (MCH)
Вначале ты написал, что точно не уверен с какой даты начинается отсчет

Я написал сразу про 100-й год, но потом засомневался (я никогда не пользовался такими датами) и решил проверить.
Тут же нашел инфу в инете и дописал её в пост

Quote (MCH)
не указано минимальное число соответствующее 01.01.100
Ну и что? Игорь спрашивал про дату - я её и написал. Остальное вторично


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (MCH)
ты правишь свои посты без отметки об исправлении.

Да, у меня и модераторов эта отметка по умолчанию не ставится

Quote (MCH)
Вначале ты написал, что точно не уверен с какой даты начинается отсчет

Я написал сразу про 100-й год, но потом засомневался (я никогда не пользовался такими датами) и решил проверить.
Тут же нашел инфу в инете и дописал её в пост

Quote (MCH)
не указано минимальное число соответствующее 01.01.100
Ну и что? Игорь спрашивал про дату - я её и написал. Остальное вторично

Автор - Serge_007
Дата добавления - 16.11.2012 в 13:53
MCH Дата: Пятница, 16.11.2012, 14:02 | Сообщение № 22
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Quote (Serge_007)
Ну и что? Игорь спрашивал про дату - я её и написал. Остальное вторично

Ты же привел мою цитату со ссылкой на свой ранее опубликованный пост (а то что он был исправлен этого не проследить)
и со своей цитатой.
Я понимаю это так, что ты раннее уже исчерпывающе ответил на вопрос, и что другие ответы лишние, что мне теперь свои посты удалять не смотря на то, что в них есть уточняющая и/или дополняющая информация о которой ты не написал?


Сообщение отредактировал MCH - Пятница, 16.11.2012, 14:05
 
Ответить
Сообщение
Quote (Serge_007)
Ну и что? Игорь спрашивал про дату - я её и написал. Остальное вторично

Ты же привел мою цитату со ссылкой на свой ранее опубликованный пост (а то что он был исправлен этого не проследить)
и со своей цитатой.
Я понимаю это так, что ты раннее уже исчерпывающе ответил на вопрос, и что другие ответы лишние, что мне теперь свои посты удалять не смотря на то, что в них есть уточняющая и/или дополняющая информация о которой ты не написал?

Автор - MCH
Дата добавления - 16.11.2012 в 14:02
Serge_007 Дата: Пятница, 16.11.2012, 14:15 | Сообщение № 23
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Quote (MCH)
Ты же привел мою цитату со ссылкой на свой ранее опубликованный пост (а то что он был исправлен этого не проследить)

Дык я для чего ссылку-то и привел! Что бы видно было, что информация добавилась smile
К сожалению на форуме, в принципе нет такой опции, как например у Шмуйловича, когда при правке поста он автоматом помечается как непрочтённый. В таком случае ссылку давать бы не пришлось

Quote (MCH)
Я понимаю это так, что ты раннее уже исчерпывающе ответил на вопрос, и что другие ответы лишние, что мне теперь свои посты удалять не смотря на то, что в них есть уточняющая и/или дополняющая информация о которой ты не написал?
Очень странная логика...
Из чего можно было сделать такие выводы - мне не ведомо sad


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Quote (MCH)
Ты же привел мою цитату со ссылкой на свой ранее опубликованный пост (а то что он был исправлен этого не проследить)

Дык я для чего ссылку-то и привел! Что бы видно было, что информация добавилась smile
К сожалению на форуме, в принципе нет такой опции, как например у Шмуйловича, когда при правке поста он автоматом помечается как непрочтённый. В таком случае ссылку давать бы не пришлось

Quote (MCH)
Я понимаю это так, что ты раннее уже исчерпывающе ответил на вопрос, и что другие ответы лишние, что мне теперь свои посты удалять не смотря на то, что в них есть уточняющая и/или дополняющая информация о которой ты не написал?
Очень странная логика...
Из чего можно было сделать такие выводы - мне не ведомо sad

Автор - Serge_007
Дата добавления - 16.11.2012 в 14:15
ALARMus Дата: Пятница, 16.11.2012, 15:01 | Сообщение № 24
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Немного ушли в сторону - я запутался в Ваших высших материях smile
Когда я писал:

130118256000000000 это 1.5.2013
130171824000000000 это 2.7.2013
Но от 1.1.1601 - ну это не суть должно просто отличаться на 299 лет.


1) т.е. если считать от 1.1.1900 - должны получиться даты 1.5.2312 и 2.7.2312 соответственно (т.е. больше нужного на 299 лет)
2) А касательно того что xls может только 16 разрядов обрабатывать, может, например, поделить число на 100 и соответственно 100 раз прибавить полученное после деления число.


Сообщение отредактировал ALARMus - Пятница, 16.11.2012, 15:03
 
Ответить
СообщениеНемного ушли в сторону - я запутался в Ваших высших материях smile
Когда я писал:

130118256000000000 это 1.5.2013
130171824000000000 это 2.7.2013
Но от 1.1.1601 - ну это не суть должно просто отличаться на 299 лет.


1) т.е. если считать от 1.1.1900 - должны получиться даты 1.5.2312 и 2.7.2312 соответственно (т.е. больше нужного на 299 лет)
2) А касательно того что xls может только 16 разрядов обрабатывать, может, например, поделить число на 100 и соответственно 100 раз прибавить полученное после деления число.

Автор - ALARMus
Дата добавления - 16.11.2012 в 15:01
MCH Дата: Пятница, 16.11.2012, 15:27 | Сообщение № 25
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Quote (ALARMus)
должно просто отличаться на 299 лет

Откуда берется число 299 лет?
Понял, это Вы от 1900 отняли 1601. Думаю нужно началом отсчета считать 01.01.2001, а потом результат уменьшать на 400 лет, иначе цикл високосных лет будет не правильно учитываться

если 130118256000000000 разделить на 864000000000 то получим 150599,8(3) дней, это чуть больше 412 лет, таким образом дожен получится 2013 год (если считать от 01.01.1601)

Если числа большие и итоговые даты получаются больше 1900 года, то можно использовать формулу:
[vba]
Code
=ДАТАМЕС(ДАТА(2001;1;1)+A1/864000000000;-4800)
[/vba]
По Вашим данным у меня получилось 30.04.2013 и 01.07.2013

если даты получаются меньше 1900 года, то подойдет формула:
[vba]
Code
=ТЕКСТ(ДАТА(2001;1;1)+A1/864000000000;"ДД.ММ.")&(ГОД(ДАТА(2001;1;1)+A1/864000000000)-400)
[/vba]


Сообщение отредактировал MCH - Пятница, 16.11.2012, 15:35
 
Ответить
Сообщение
Quote (ALARMus)
должно просто отличаться на 299 лет

Откуда берется число 299 лет?
Понял, это Вы от 1900 отняли 1601. Думаю нужно началом отсчета считать 01.01.2001, а потом результат уменьшать на 400 лет, иначе цикл високосных лет будет не правильно учитываться

если 130118256000000000 разделить на 864000000000 то получим 150599,8(3) дней, это чуть больше 412 лет, таким образом дожен получится 2013 год (если считать от 01.01.1601)

Если числа большие и итоговые даты получаются больше 1900 года, то можно использовать формулу:
[vba]
Code
=ДАТАМЕС(ДАТА(2001;1;1)+A1/864000000000;-4800)
[/vba]
По Вашим данным у меня получилось 30.04.2013 и 01.07.2013

если даты получаются меньше 1900 года, то подойдет формула:
[vba]
Code
=ТЕКСТ(ДАТА(2001;1;1)+A1/864000000000;"ДД.ММ.")&(ГОД(ДАТА(2001;1;1)+A1/864000000000)-400)
[/vba]

Автор - MCH
Дата добавления - 16.11.2012 в 15:27
Hugo Дата: Пятница, 16.11.2012, 15:34 | Сообщение № 26
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3691
Репутация: 790 ±
Замечаний: 0% ±

365
У меня получается разница в 3 дня...
Хотя код пока идиотский sad
[vba]
Code
Function mydata(r As Range)
     mydata = CDate(r.Value / 864000000000#)
     mydata = CDate(Format(Day(mydata), "00") & "." & Format(Month(mydata), "00") & "." & Year(mydata) - 299)
End Function
[/vba]
итог
130118256000000000=1.30118E+17=28.04.2013
130171824000000000=1.30172E+17=29.06.2013


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеУ меня получается разница в 3 дня...
Хотя код пока идиотский sad
[vba]
Code
Function mydata(r As Range)
     mydata = CDate(r.Value / 864000000000#)
     mydata = CDate(Format(Day(mydata), "00") & "." & Format(Month(mydata), "00") & "." & Year(mydata) - 299)
End Function
[/vba]
итог
130118256000000000=1.30118E+17=28.04.2013
130171824000000000=1.30172E+17=29.06.2013

Автор - Hugo
Дата добавления - 16.11.2012 в 15:34
MCH Дата: Пятница, 16.11.2012, 15:43 | Сообщение № 27
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Quote (Hugo)
У меня получается разница в 3 дня

Игорь, 0 в VBA это 30.12.1899, а нужно считать от 01.01.1601 таким образом получается не ровно 299 лет, а еще нужно прибавлять 3 2 дня
К томуже лучше использовать смещение в 400 лет, циклы високосности совпадают

либо использовать такую UDF:
[vba]
Code
Function mDate$(d#)
       mDate = Format(DateSerial(1601, 1, 1) + d / 864000000000#, "dd.mm.yyyy")
End Function
[/vba]


Сообщение отредактировал MCH - Пятница, 16.11.2012, 15:49
 
Ответить
Сообщение
Quote (Hugo)
У меня получается разница в 3 дня

Игорь, 0 в VBA это 30.12.1899, а нужно считать от 01.01.1601 таким образом получается не ровно 299 лет, а еще нужно прибавлять 3 2 дня
К томуже лучше использовать смещение в 400 лет, циклы високосности совпадают

либо использовать такую UDF:
[vba]
Code
Function mDate$(d#)
       mDate = Format(DateSerial(1601, 1, 1) + d / 864000000000#, "dd.mm.yyyy")
End Function
[/vba]

Автор - MCH
Дата добавления - 16.11.2012 в 15:43
ALARMus Дата: Пятница, 16.11.2012, 15:49 | Сообщение № 28
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Quote (Hugo)
разница в 3 дня...

что то не дорабатываем sad

Поясню где такие данные.
В ActiveDirectory есть поле с типом Integer, называется accountExpire и оно как раз содержит такое значение. (описание кривое написано : "с точностью до 100 наносекунд, с 1.1.1601" - я расцениваю это как количество раз по 100 наносекунд, что подтверждают грубые расчеты)

Так вот эту правильную дату показывает оснастка (или через командную строку powershell)
А то что видно там в виде цифры отображает другая программа, которая не делает преобразований в дату, а берет из поля что там есть.

Поэтому связь взаимооднозначная и это должно быть как правильный ответ smile
 
Ответить
Сообщение
Quote (Hugo)
разница в 3 дня...

что то не дорабатываем sad

Поясню где такие данные.
В ActiveDirectory есть поле с типом Integer, называется accountExpire и оно как раз содержит такое значение. (описание кривое написано : "с точностью до 100 наносекунд, с 1.1.1601" - я расцениваю это как количество раз по 100 наносекунд, что подтверждают грубые расчеты)

Так вот эту правильную дату показывает оснастка (или через командную строку powershell)
А то что видно там в виде цифры отображает другая программа, которая не делает преобразований в дату, а берет из поля что там есть.

Поэтому связь взаимооднозначная и это должно быть как правильный ответ smile

Автор - ALARMus
Дата добавления - 16.11.2012 в 15:49
ALARMus Дата: Пятница, 16.11.2012, 15:51 | Сообщение № 29
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Quote (MCH)
По Вашим данным у меня получилось 30.04.2013 и 01.07.2013

Да что то на денек не совпадает
 
Ответить
Сообщение
Quote (MCH)
По Вашим данным у меня получилось 30.04.2013 и 01.07.2013

Да что то на денек не совпадает

Автор - ALARMus
Дата добавления - 16.11.2012 в 15:51
ALARMus Дата: Пятница, 16.11.2012, 15:53 | Сообщение № 30
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Quote (MCH)
=ТЕКСТ(ДАТА(2001;1;2)+A1/864000000000;"ДД.ММ.")&(ГОД(ДАТА(2001;1;1)+A1/864000000000)-400)


Вот так получается ? smile


Сообщение отредактировал ALARMus - Пятница, 16.11.2012, 15:58
 
Ответить
Сообщение
Quote (MCH)
=ТЕКСТ(ДАТА(2001;1;2)+A1/864000000000;"ДД.ММ.")&(ГОД(ДАТА(2001;1;1)+A1/864000000000)-400)


Вот так получается ? smile

Автор - ALARMus
Дата добавления - 16.11.2012 в 15:53
Hugo Дата: Пятница, 16.11.2012, 15:54 | Сообщение № 31
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3691
Репутация: 790 ±
Замечаний: 0% ±

365
Не пойму с этой ДАТАМЕС/EDATE - судя по
http://office.microsoft.com/en-gb/excel-help/edate-HP005209073.aspx
должно быть в 2003 - но нету... sad


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеНе пойму с этой ДАТАМЕС/EDATE - судя по
http://office.microsoft.com/en-gb/excel-help/edate-HP005209073.aspx
должно быть в 2003 - но нету... sad

Автор - Hugo
Дата добавления - 16.11.2012 в 15:54
MCH Дата: Пятница, 16.11.2012, 16:09 | Сообщение № 32
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Quote (ALARMus)
Да что то на денек не совпадает

Quote (ALARMus)
ДАТА(2001;1;2) ... Вот так получается


Нужно считать от начала дня 01.01.1601 или от конца, какой результат должен быть если прошло
0 раз по 100 наносекунд: 01.01.1601 или 02.01.1601?
1 раз по 100 наносекунд: 01.01.1601 или 02.01.1601?
863999999999 раз по 100 наносекунд: 01.01.1601 или 02.01.1601?
864000000000 раз по 100 наносекунд: 02.01.1601 или 03.01.1601?

если рассуждать логически:
130118256000000000 / 864000000000 = 150599,8(3) дней
за период с 01.01.1601 по 01.01.2013 прошло ровно 412 лет, из которых 100 високосных и 312 невисокосных (1700, 1800, 1900 - не високосные)
таким образом с 01.01.1601 по 01.01.2013 прошло 100*366 + 312*355 = 150480 дней
остается еще 150599,8(3) - 150480 = 119 полных дней и 20 часов
01.02.2013 - 31 день
01.03.2013 - 28 дней
01.04.2013 - 31 день
30.04.2013 - 29 дней
итого 31+28+31+29 = 119

Таким образом, с 01.01.1601 00:00 по 30.04.2013 20:00 прошло 130118256000000000 раз по 100 наносекунд
Добавлять еще один день в расчеты или нет решайте сами


Сообщение отредактировал MCH - Пятница, 16.11.2012, 16:13
 
Ответить
Сообщение
Quote (ALARMus)
Да что то на денек не совпадает

Quote (ALARMus)
ДАТА(2001;1;2) ... Вот так получается


Нужно считать от начала дня 01.01.1601 или от конца, какой результат должен быть если прошло
0 раз по 100 наносекунд: 01.01.1601 или 02.01.1601?
1 раз по 100 наносекунд: 01.01.1601 или 02.01.1601?
863999999999 раз по 100 наносекунд: 01.01.1601 или 02.01.1601?
864000000000 раз по 100 наносекунд: 02.01.1601 или 03.01.1601?

если рассуждать логически:
130118256000000000 / 864000000000 = 150599,8(3) дней
за период с 01.01.1601 по 01.01.2013 прошло ровно 412 лет, из которых 100 високосных и 312 невисокосных (1700, 1800, 1900 - не високосные)
таким образом с 01.01.1601 по 01.01.2013 прошло 100*366 + 312*355 = 150480 дней
остается еще 150599,8(3) - 150480 = 119 полных дней и 20 часов
01.02.2013 - 31 день
01.03.2013 - 28 дней
01.04.2013 - 31 день
30.04.2013 - 29 дней
итого 31+28+31+29 = 119

Таким образом, с 01.01.1601 00:00 по 30.04.2013 20:00 прошло 130118256000000000 раз по 100 наносекунд
Добавлять еще один день в расчеты или нет решайте сами

Автор - MCH
Дата добавления - 16.11.2012 в 16:09
ALARMus Дата: Пятница, 16.11.2012, 16:11 | Сообщение № 33
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 181
Репутация: 0 ±
Замечаний: 20% ±

Quote (MCH)
Нужно считать от начала дня 01.01.1601 или от конца

Не могу сказать как оно считает. Я могу как писал ранее, указать соответствие длинного числа и что оно значит в формате даты
 
Ответить
Сообщение
Quote (MCH)
Нужно считать от начала дня 01.01.1601 или от конца

Не могу сказать как оно считает. Я могу как писал ранее, указать соответствие длинного числа и что оно значит в формате даты

Автор - ALARMus
Дата добавления - 16.11.2012 в 16:11
MCH Дата: Пятница, 16.11.2012, 16:21 | Сообщение № 34
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Quote (Hugo)
Не пойму с этой ДАТАМЕС/EDATE ... должно быть в 2003 - но нету...

Функция ДАТАМЕС работает в 2003 офисе только с подключенным "пакетом анализа"
 
Ответить
Сообщение
Quote (Hugo)
Не пойму с этой ДАТАМЕС/EDATE ... должно быть в 2003 - но нету...

Функция ДАТАМЕС работает в 2003 офисе только с подключенным "пакетом анализа"

Автор - MCH
Дата добавления - 16.11.2012 в 16:21
Hugo Дата: Пятница, 16.11.2012, 17:37 | Сообщение № 35
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3691
Репутация: 790 ±
Замечаний: 0% ±

365
Спасибо, Михаил.
Пакет анализа включен постоянно - иногда нужен для работы. И это было первое, что я полез смотреть...
Не была включена версия VBA - включил-выключил, и как-то заработало smile


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеСпасибо, Михаил.
Пакет анализа включен постоянно - иногда нужен для работы. И это было первое, что я полез смотреть...
Не была включена версия VBA - включил-выключил, и как-то заработало smile

Автор - Hugo
Дата добавления - 16.11.2012 в 17:37
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!