gpt4 book ai didi

Perl 将本地时间转换为 unix(纪元)时间

转载 作者:行者123 更新时间:2023-12-02 06:55:16 28 4
gpt4 key购买 nike

使用 perl,我试图估计自文件创建以来的时间。我想将本地时间转换为 unix 时间(纪元),然后取文件的 unix 时间并减去。

我面临的问题是,当我将 localtime 转换为 unixtime 时,它​​转换不正确!

my $current = str2time (localtime(time));
print $current;

我得到的结果是

2768504400 = Sun, 23 Sep 2057 21:00:00 GMT
2421349200 = Sun, 23 Sep 2046 21:00:00 GMT

我必须以特定日期格式输入 str2time 吗?

最佳答案

你在这里做了一些奇怪的事情 - localtime(time) 需要 - 纪元时间 (time) 并将其转换为字符串。

然后你把它转换回来。

只需使用 time()

或者更好的是-M,它告诉你文件多久以前被修改过。 (在几天内,所以你必须乘以)。

例如:

my $filename = "sample.csv";
my $modification = -M $filename;
print $modification * 84600;

但如果您真的想花时间再将其转换回来 - 您需要查看 localtime(time) 如何返回结果。

如果你这样做:

print localtime(time);

你得到:

5671624811542661

因为 localtime 正在列表上下文中进行评估,因此返回一个值数组。 (无需解析即可使用)。

 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);

如果您在标量上下文中执行此操作,它会返回一个表示时间的字符串:

print "".localtime(time);

给予:

Thu Sep 24 16:09:33 2015

但请注意 - 这可能会有所不同,具体取决于您当前的语言环境。这就是可能为什么str2time正在做一些奇怪的事情——因为它对并不总是适用的格式做出了某些假设。最大的问题是:

When both the month and the date are specified in the date as numbers they are always parsed assuming that the month number comes before the date. This is the usual format used in American dates.

您可能最好使用 Time::Piecestrftime 来获得固定格式:

例如

use Time::Piece;
print localtime(time) -> strftime ( "%Y-%m-%d %H:%M:%S" );

注意 - Time::Piece 重载 localtime,因此您可以(相当)透明地实际使用它。当然,那么你也可以这样做:

print localtime(time) -> epoch;

并且不用大惊小怪地来回转换。

关于Perl 将本地时间转换为 unix(纪元)时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32764240/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com