如何从 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 对象。
是否可以在 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 对象。