Страницы: 1
RSS
Преобразование числа в дату
 
Помогите, как в Excel можно преобразовать числа (набор которых имеется в таблице), означающие количество 100 наносекундных интервалов с 1 января 1601 года,  в дату.


Для примера:

134202027930799447 это 09.04.2026 13:06:33
133648906002307011 это 08.07.2024 8:36:40
 
ALARMus, Гугль знает всё. Только вот у меня на 3 часа меньше показывает...

https://share.google/aimode/qXCKZZ4ViX6D02EBr



P.S. Возможно на 3 часа меньше потому что 3 последних цифры Эксель обнуляет. А это Гугль не учёл...
Была вроде надстройка для работы с длинными числами, наверное её нужно привлечь.
Изменено: Hugo - 09.04.2026 16:00:22
 
Гуглил и мне такой бред выдало:

Формула в Excel может выглядеть так:=СЕГОДНЯ() + (количество_интервалов * 100000000) / 86400
=========


Я пытался сделать это самостоятельно.
Но не совпало.
РасчетноеДолжно быть
15.06.2025 17:32:3508.07.2024 8:36:40
1) Рассчитал по заданному числу общее количество дней => (1,16*10^-12) * заданное число = 155032,731

2) Рассчитал количество суток с 1601 до 1900 = 109209

3) Отнял из 1)  то что в 2) - получилось число дней после 1900

4) на результат в 3) применил формат ГГГГ.ММ.ДД чч:мм:сс
Изменено: ALARMus - 09.04.2026 16:31:22
 
ALARMus,  возможно если Эксель х64 то в VBA в UDF можно использовать тип LongLong, я проверить не могу, у меня он х32
Изменено: Hugo - 09.04.2026 16:45:04
 
ALARMus, excel работает только с 15 разрадными числами, все что больше переводит в экспонентциальную форму, теряя последние разряды. У Hugo,  из-за обнуления 3 разрядов ошибка вышла 3 часа, у вас с умножением 18 разрядного числа на 9 разрядное, думаю ошибка будет еще больше
 
Если в ячейке A1 хранится текст "134202027930799447", то
Код
 Debug.Print CDate(CDec(Range("A1").Value) / 864000000000# - 109205 + 3 / 24)
выдает требуемое значение (09.04.2026 13:06:33).
3 / 24 учитывает временную зону для Москвы

Если будут трудности с написанием UDF, то приложите образец файла.
Изменено: sokol92 - 09.04.2026 20:39:31
Владимир
Страницы: 1
Читают тему
Наверх