Как мне получить локальный mtime из fstat в perl? - PullRequest
0 голосов
/ 31 марта 2020

Можно ли получить / преобразовать mtime из fstat в местное время в perl?

Если я сделаю

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

, а затем отформатировать это время, скажем - '%Y%m%d%H%M' Я получаю время, которое на 1 час раньше, чем время, которое я вижу на ls -l, поскольку я живу, и моя машина настроена на 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).

Есть ли способ справиться с этим простым способом (то есть: чтобы мне не приходилось вручную настраивать часовой пояс или летнее время)?

1 Ответ

3 голосов
/ 31 марта 2020

Объект Time :: Piece может представлять либо местное время, либо время UT C. Следующее создает объект, представляющий время UT C:

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.

...