使用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
我是否必须为str 2 time提供特定的日期格式?
2条答案
按热度按时间efzxgjgh1#
你在这里做了一些奇怪的事情-
localtime(time)
取-历元时间(time
)并将其转换为字符串。然后你把它转换回来。
只需使用
time()
或者更好的是
-M
,它可以告诉你一个文件在多长时间前被修改过(以天为单位,所以你必须乘上)。例如:
但是,如果您真的想花时间将其重新转换回来,则需要查看
localtime(time)
如何返回结果。如果您这样做:
您可以获得:
因为
localtime
是在列表上下文中计算的,所以返回一个值数组。(您可以使用它而不需要解析)。如果在标量上下文中执行此操作,则返回一个表示时间的字符串:
提供:
但请注意,这可能会因您当前的语言环境而有所不同。这 * 可能 * 就是
str2time
做奇怪事情的原因-因为它对格式做了某些假设,但这些假设并不总是适用的。最大的问题是:当月份和日期都以数字形式在日期中指定时,它们总是假定月份在日期之前进行分析。这是美国日期中常用的格式。
最好使用
Time::Piece
和strftime
来获得固定格式:例如:
注意-
Time::Piece
重载了localtime
,所以你可以(相当)透明地使用它。当然,你也可以这样做:而且不需要来回转换的麻烦。
dgenwo3n2#
您未请求本地时间生成标量(字符串)而不是数组。
perldoc -f localtime
将time函数返回的时间转换为包含9个元素的列表,其中包含针对本地时区分析的时间。通常如下所示:
0 1 2 3 4 5 6 7 8
($秒,$分,$小时,$月,$日,$月,$年,$月,$日,$年月日)=本地时间(时间);
...
**在标量上下文中,“localtime()”返回ctime(3)值:
$now_string =本地时间;#例如,“1994年10月13日星期四04:54:34”**