如何将日期转换为纪元时间?

时间:2011-03-02 11:45:19

标签: perl

我有一个格式很大的格式文件:

29/01/2010 18:00 string1 string2 .....

30/01/2010 18:30 string3 string4 .....

...

...

dd/mm/yyyy hh:MM strings strings....

我需要根据日期执行一些统计。

所以我想在文件中用字符dd/mm/yyyy hh:MM替换纪元时间,以便执行简单的操作。

我认为最好的方法是使用Perl,但我真的不知道从哪里开始。任何提示?

3 个答案:

答案 0 :(得分:4)

就是这样?这个快速而肮脏的单行应该做:

perl -MPOSIX -pwe 's{^(\d{2})/(\d{2})/(\d{4}) (\d{2}):(\d{2}) }{mktime(0,$5,$4,$1,$2-1,$3-1900)." "}e;'

将文件输入标准输入,然后将更改后的版本输出到标准输出。它所做的就是在开始时查找具有“dd / mm / yyyy hh:mm”的行,并将日期组件从mktime模块提供给POSIX函数以获取unix时间戳。

答案 1 :(得分:2)

use DateTime::Format::Strptime;

my $Strp = new DateTime::Format::Strptime(
        pattern     => '%d/%m/%Y %H:%M',
        locale      => 'en_EN',
        time_zone   => 'UTC',
);

open INPUT, $file;
while (<INPUT>)
{
   my ($date, $time, $foo) = split(' ', $_, 3);
   my $dt = $Strp->parse_datetime("$date $time");
   printf "%s %s", $dt->strftime('%s'), $foo;
}
close INPUT;

答案 2 :(得分:1)

您可以使用核心模块Time::Local

#!/usr/bin/perl
use 5.10.1;
use strict;
use warnings;
use Time::Local;


while(<DATA>) {
    if (m#(\d+)/(\d+)/(\d+)\s+(\d+):(\d+)\s#) {
        say timelocal(0,$5,$4,$1,$2-1,$3);
    }
}

__DATA__
29/01/2010 18:00 string1 string2 .....

30/01/2010 18:30 string3 string4 .....

<强>输出:

1264784400
1264872600