如何从 perl 中的 fstat 获取本地时间?

How do I get local mtime from fstat in perl?

是否可以在 perl 中get/convert从 fstat 到本地时间的 mtime?

如果我这样做

my $stat = stat($file);
my $mtime = $stat->mtime;
my $time = Time::Piece->strptime($time, '%s');

然后将该时间格式化为 - 比如说 - '%Y%m%d%H%M' 我得到的时间比我在 ls -l 上看到的时间早 1 小时,因为我住在里面并且我的机器配置为 GMT +1.

相反,我希望得到与 ls -l

一致的输出

所以如果

> ls -l foo.txt
> -rw-r--r--@  1 somuser  296108113    163673 Mar 31 16:43 foo.txt

输出是 202003311643 而不是 - 就像我现在得到的 - 202003311443(GMT+1 和夏令时)。

有没有一种方法可以直接处理这个问题(即:这样我就不必手动调整时区或 DST)?

一个Time::Piece对象可以表示本地时间或UTC时间。下面创建一个表示 UTC 时间的对象:

my $time = Time::Piece->strptime($mtime, '%s');

创建当地时间的等价物是

use Time::Piece;
my $time = localtime->strptime($mtime, '%s');

my $time = Time::Piece::localtime->strptime($mtime, '%s');

也就是说,这里不需要使用 strptime。可以简单地使用

use Time::Piece;
my $time = localtime($mtime);

my $time = Time::Piece::localtime($mtime);

获取正确的 Time::Piece 对象。