如何在Perl中将历元时间转换为YMD?
我正在尝试将一个日期从历元转换为年-月-日,并获得正确的日期如何在Perl中将历元时间转换为YMD?,perl,Perl,我正在尝试将一个日期从历元转换为年-月-日,并获得正确的日期 my $day = 18322; my ($y, $m, $d) = (gmtime 86400*$day)[5,4,3]; 纪元日期为1583020800转换如下$y为120$m为2$d为1 我想我必须加上$y=$y+1900我得到了正确的年份,我可以在$m中加上1来得到正确的月份日期$d我不需要添加任何内容。这是正确的吗。我正在为某人接管代码,但我不知道[5,4,3]的作用 大纪元时间1583020800是2020年3月1日太阳
my $day = 18322;
my ($y, $m, $d) = (gmtime 86400*$day)[5,4,3];
纪元日期为1583020800转换如下$y为120$m为2$d为1
我想我必须加上
$y=$y+1900
我得到了正确的年份,我可以在$m
中加上1来得到正确的月份日期$d
我不需要添加任何内容。这是正确的吗。我正在为某人接管代码,但我不知道[5,4,3]
的作用 大纪元时间1583020800是2020年3月1日太阳00:00:00
您可以使用gmtime
,但这很尴尬。它返回一个值数组,需要对它们进行转换。年份是自1900年以来的年数,月份从0开始。这是因为它是一个围绕Perl编写的薄包装器
my($y,$m,$d) = (gmtime(1583020800))[5,4,3];
$y += 1900;
$m += 1;
printf "%04d-%02d-%02d\n", $y, $m, $d;
相反,使用内置的
或者更强大
大纪元时间1583020800是太阳2020年3月1日00:00:00 您可以使用
gmtime
,但这很尴尬。它返回一个值数组,需要对它们进行转换。年份是自1900年以来的年数,月份从0开始。这是因为它是一个围绕Perl编写的薄包装器
my($y,$m,$d) = (gmtime(1583020800))[5,4,3];
$y += 1900;
$m += 1;
printf "%04d-%02d-%02d\n", $y, $m, $d;
相反,使用内置的
或者更强大
(…)[5,4,3]
是一个文本列表片段。parens中的东西创建了一个列表,但它只选择元素5、4和3
gmtime
docs指向,显示列表中每件事物的位置:
localtime
Converts a time as returned by the time function to a 9-element
list with the time analyzed for the local time zone. Typically
used as follows:
# 0 1 2 3 4 5 6 7 8
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);
(…)[5,4,3]
是一个文本列表片段。parens中的东西创建了一个列表,但它只选择元素5、4和3
gmtime
docs指向,显示列表中每件事物的位置:
localtime
Converts a time as returned by the time function to a 9-element
list with the time analyzed for the local time zone. Typically
used as follows:
# 0 1 2 3 4 5 6 7 8
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);
我会使用时间::片,如施沃恩的回答。但是为了涵盖所有基础,您也可以使用POSIX.pm中的
strftime()
函数
use feature 'say';
use POSIX qw[strftime];
say strftime('%Y-%m-%d', gmtime(1583020800));
输出:
2020-03-01
您可以将不同格式的字符串传递给strftime()我将使用Time::Piece,如Schwern的答案所示。但是为了涵盖所有基础,您也可以使用POSIX.pm中的
strftime()
函数
use feature 'say';
use POSIX qw[strftime];
say strftime('%Y-%m-%d', gmtime(1583020800));
输出:
2020-03-01
您可以将不同格式的字符串传递给strftime()您是从18322天开始的吗?或者epoch 158320800?“[5,4,3]所做的”是从数组中只提取需要的部分。由于
gmtime
返回一个数组,因此它周围的括号允许您直接使用[5,4,3]
符号来获取所需的元素:5、4和3。请参阅perldoc-f localtime
或了解有关gmtime/localtime数组的详细信息。您希望该历元时间的日期在哪个时区?是否从18322天开始?或者epoch 158320800?“[5,4,3]所做的”是从数组中只提取需要的部分。由于gmtime
返回一个数组,因此它周围的括号允许您直接使用[5,4,3]
符号来获取所需的元素:5、4和3。有关gmtime/localtime数组的详细信息,请参见perldoc-f localtime
或。您希望该历元时间的日期位于哪个时区?如果要转换为YMD,则DateTime在这方面没有优势。这对于做复杂的日期数学很有好处,它涉及到所有需要的神秘细节。Schwern知道这一点,但大多数人不知道。如果转换为YMD是一项任务,DateTime在这方面真的没有优势。这对于做复杂的日期数学很有好处,它涉及到所有需要的神秘细节。Schwern知道这一点,但大多数人不知道。