perl中最快的日期到时间戳转换

时间:2014-04-27 10:41:34

标签: perl date timestamp

Perl中时间戳转换方法的最快日期是什么。我的意思是和date命令一样快。这很奇怪,因为在Perl中将日期转换为时间戳真的很痛苦。我使用Date :: Parse,Time :: Piece,Date :: Time模块。 All使代码运行得更慢。

让我举个例子,一旦我运行带有日期转换的代码,它将在9秒内完成。一旦我添加了类调用并进行转换,它就会让我多跑48秒。下面仅给出两个版本之间的差异。这里使用的模块是Date::Parse

my $tmst = str2time($each[0]." ".$each[1]);

两个变量来自文件,其中一个是Date,另一个是时间。 有没有人知道进行这种转换的更快方式,

赞赏你的回复
感谢

1 个答案:

答案 0 :(得分:4)

str2time很慢,因为它支持许多不同的日期和时间格式,并且必须在解析之前尝试猜测传入日期和时间的格式。

如果您不需要,并且您的日期格式非常简单,那么使用来自POSIX模块(它是Perl核心的一部分)的mktime之类的东西将会明显加快。这个基准测试表明加速了640%:

#!/usr/bin/env perl
use strict;
use warnings;
use POSIX qw(mktime);
use Date::Parse qw(str2time);
use Benchmark qw(cmpthese);

sub to_stamp {
  $_[0] =~ /\A(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})\z/
    and mktime($6, $5, $4, $3, $2-1, $1-1900);
}

print to_stamp('2014-04-27 12:17:30'), "\n";
print str2time('2014-04-27 12:17:30'), "\n";

cmpthese -1, {
  to_stamp => q[  to_stamp('2014-04-27 12:17:30')  ],
  str2time => q[  str2time('2014-04-27 12:17:30')  ],
};