3

エポック秒を印刷可能な日時に変換する5.005のPerlコアモジュールはありますか?

私たちのシステムにはDateTime.pmがありますが、機能を必要とするスクリプトはまだPerl 5.005にあり、5.6以降にアップグレードすることはできません(技術的でない理由で完了できません)。DateTime.pm-少なくとも私たちが持っているバージョン-には5.6が必要です。

したがって、次のいずれかが必要です。

  • 理想的には、エポック秒を日付/時刻文字列に変換するPerl5.005コアのモジュールです。できればYY/MM / DD hh:mm:ss形式ですが、必須ではありません。

  • それができない場合、エポック秒を日付/時刻文字列に変換する5.005互換の非XSモジュール。できればYY/MM / DD hh:mm:ss形式ですが、必須ではありません。

    Perl 5.005がリリースされたときにCPANでこの機能を備えていたであろうモジュールに対する強い好み(そうすれば、それは会社の既存のCPANモジュールのセットにあると考えられます)

4

3 に答える 3

11

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
于 2011-11-09T15:04:16.007 に答える
5

コアルーチンlocaltimegmtime(も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
于 2011-11-09T14:50:57.753 に答える
0

POSIX::strftimeソリューションは最も柔軟なソリューションです。ただし、正確な形式をあまり選択しない場合は、スカラーコンテキストでlocaltime(またはgmtime)を使用して、エポック秒から人間が読める日時文字列を取得できます。

$ perl -le'print scalar localtime 1000000000'
Sun Sep  9 02:46:40 2001
于 2011-11-10T15:43:05.797 に答える