你正在做一件奇怪的事 - 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
做的是奇怪的事情 - 因爲它對某些並不總是適用的格式做了某些假設。大問題是這樣的:
如果在日期中將月份和日期都指定爲數字,他們總是被解析,假定月份數字在日期之前。這是美國日期使用的通常格式。
你可能會更好,而不是使用Time::Piece
和strftime
得到一個固定的格式:
例如
use Time::Piece;
print localtime(time) -> strftime ("%Y-%m-%d %H:%M:%S");
注 - Time::Piece
重載localtime
這樣你就可以真正地使用它(相當)透明。當然,你可以也做:
print localtime(time) -> epoch;
而且沒有來回轉換的所有忙亂做。
參見http://search.cpan.org/~rse/lcwa-1.0.0/lib/lwp/lib/HTTP/Date.pm #str2time($ str _ [,_ $ zone])獲取支持的格式列表。 – syck
爲什麼不直接使用[time](http://p3rl.org/time)? – choroba
你確定要使用文件的unix時間嗎?爲什麼不使用perl的stat函數來獲取文件的最後修改日期/時間並將蘋果與蘋果進行比較?像'perl -e'print(「LMD:」,scalar(localtime((stat(「README.md」))[9])),「\ nNOW:」,標量(localtime(time())) \ n「)'',它產生:'LMD:Thu Sep 17 12:08:58 2015'和'NOW:Thu Sep 24 24:58:38 2015'' – hepcat72