【问题标题】:How do I get local mtime from fstat in perl?如何从 perl 中的 fstat 获取本地 mtime?
【发布时间】:2020-03-31 15:38:56
【问题描述】:

是否可以在 perl 中将 mtime 从 fstat 获取/转换为本地时间?

如果我这样做了

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)。

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

【问题讨论】:

  • 尝试设置“TZ”环境变量。不是在 Perl 中,而是在你的 shell 中。很久以前,你以前总是需要这个,现在不确定它是不是真的,但我总是在我使用的每台机器上设置它。对我(美国东部)来说,它是 TZ=EST5EDT,因此请寻找一种适用于您所在位置的格式。

标签: perl strftime


【解决方案1】:

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 对象。

【讨论】:

  • 感谢这样的作品。我确实得到了当地时间,现在我只需要弄清楚如何正确输出它。
猜你喜欢
  • 2014-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2019-07-03
  • 1970-01-01
相关资源
最近更新 更多