2

谁能帮我这个?我在具有以下格式的日志文件文件中有一个时间值:

2012 年 8 月 28 日星期二 09:50:06

我需要将此时间值转换为 unixtime。

问候

4

3 回答 3

5

您最好的选择是Time::Piece,这是一个核心模块,因此不需要安装。它有一个strptime解析时间/日期字符串的epoch方法和一个返回 Unix 纪元时间的方法

将其滚动到子程序中很方便,如下所示

use strict;
use warnings;

use Time::Piece ();

print date_to_epoch('Tue Aug 28 09:50:06 2012'), "\n";

sub date_to_epoch {
   return Time::Piece->strptime($_[0], '%a %b %d %T %Y')->epoch;
}

输出

1346147406
于 2012-08-31T11:54:39.707 回答
2

这对我有用(需要DateTime::Format::Strptime):

#!/usr/bin/perl

use strict;
use warnings;

use DateTime::Format::Strptime;

my $strp = DateTime::Format::Strptime->new(
  pattern   => '%a %b %d %H:%M:%S %Y',
  locale    => 'en_US',
  time_zone => 'local',  # Or even something like 'America/New_York'
  on_error  => 'croak',
);

my $dt = $strp->parse_datetime('Tue Aug 28 09:50:06 2012');

print $dt->epoch() . "\n";
于 2012-08-31T11:28:13.037 回答
1

使用 Time::Piece 模块中的 strptime 函数解析日期,然后使用 strftime 函数返回 Unix 时间戳。

use Time::Piece;
$parsed = Time::Piece->strptime("Tue Aug 28 09:50:06 2012", "%a %b %e %T %Y");
$unixtime = $parsed->strftime("%s");
于 2012-08-31T11:35:15.140 回答