Есть ли основной модуль Perl 5.005, который бы преобразовывал секунды эпохи в строку даты и времени? - PullRequest
3 голосов
/ 09 ноября 2011

Есть ли в 5.005 модуль ядра Perl, который бы преобразовывал секунды эпохи в печатное время?

В нашей системе есть DateTime.pm, но скрипт, который нуждается в этой функциональности, все еще работает на Perl 5.005, и его невозможно обновить до 5.6+ (не спрашивайте. Просто не могу быть закончен по нетехническим причинам) DateTime.pm - по крайней мере, версия, которая у нас есть - требует 5.6.

Поэтому мне нужно одно из следующих:

  • В идеале это модуль в ядре Perl 5.005, который будет преобразовывать секунды эпохи в строку даты / времени. Желательно в формате ГГ / ММ / ДД чч: мм: сс, но не обязательно.

  • Если это не так, модуль, не совместимый с XS, совместим с 5.005, который преобразует секунды эпохи в строку даты / времени. Желательно в формате ГГ / ММ / ДД чч: мм: сс, но не обязательно.

    Сильные предпочтения для модуля, который имел бы эту функциональность на CPAN, когда был выпущен Perl 5.005 (таким образом, вполне вероятно, что это было бы в существующем наборе модулей CPAN компании)

Ответы [ 3 ]

11 голосов
/ 09 ноября 2011

Согласно CPAN доступен модуль POSIX .Таким образом, вы можете использовать функцию strftime.Это то, что я использую все время в 5.8.8

use POSIX();
my $time_t = 1234567890;
my $txt = POSIX::strftime( "%Y-%m-%d %T", localtime($time_t) );
print "$txt\n";

Дает

2009-02-14 10:31:30
5 голосов
/ 09 ноября 2011

См. Основные подпрограммы localtime и gmtime (также time).

ИМХО, обычно проще написать небольшую подпрограмму для такого рода форматирования, чем вводить новую зависимость. Например:

sub epoch_to_datetime {
  my $time = shift(@_) || time();
  my ($s, $m, $h, $md, $mo, $yr) = localtime($time);
  my $date = join("/",
      sprintf("%02d", $yr % 100),
      sprintf("%02d", $mo + 1),
      sprintf("%02d", $md));
  my $time = join(":",
      sprintf("%02d", $h),
      sprintf("%02d", $m),
      sprintf("%02d", $s));
  return "$date $time";
}

print epoch_to_datetime(time()) . "\n";
# 11/11/09 08:06:10
0 голосов
/ 10 ноября 2011

Решение POSIX :: strftime является наиболее гибким.Но если вы не очень разборчивы в отношении точного формата, тогда вы можете использовать localtime (или gmtime) в скалярном контексте, чтобы получить удобочитаемую строку даты и времени из секунд эпохи.

$ perl -le'print scalar localtime 1000000000'
Sun Sep  9 02:46:40 2001
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...