Преобразования последовательных значения даты в Perl
Я использую Spreadsheet::XLSX
для преобразования XLSX в CSV на Linux.
Настраиваемые поля дат преобразуются в числа. Я знаю, что XLSX хранит пользовательские даты в виде серийных значений. Мне нужно найти способ преобразовать эти значения в даты / времена.
Пример:
CSV: 40829
XLSX: 10/13/2011 0:00
Поэтому я пытаюсь понять, как преобразовать 40829
в 10/13/2011 0:00
Я провел некоторые исследования и не смог найти никакого (Perl) решения.
Я могу предоставить код, если это необходимо.
Пожалуйста, посоветуйте.
Спасибо ты, - Андрей
2 ответа:
Excel хранит даты и время в виде числа, представляющего количество дней с момента
1900-Jan-0
, плюс дробную часть 24-часового дня:ddddd.tttttt
.Вы можете написать функцию, чтобы сделать вычисления самостоятельно, или вы можете посмотреть на некоторые из модулей, уже размещенных на cpan для этого,
DateTime::Format::Excel
следует делать то, что вам нужно иDateTimeX::Format::Excel
похоже, это тоже сработает.
Согласно предыдущему сообщению, это похоже на число дней с 1 января 1900 года. Сделав 40828 ' - ое января 1900 года (с учетом смещения на единицу, являющегося 1 января, а не 0-ое), мы получим:
use POSIX 'mktime' my $epoch = mktime 0,0,0, 40829-1,0,0; print scalar localtime($epoch);
Дает
Thu Oct 13 00:00:00 2011