Perl中时间戳转换方法的最快日期是什么。我的意思是和date命令一样快。这很奇怪,因为在Perl中将日期转换为时间戳真的很痛苦。我使用Date :: Parse,Time :: Piece,Date :: Time模块。 All使代码运行得更慢。
让我举个例子,一旦我运行带有日期转换的代码,它将在9秒内完成。一旦我添加了类调用并进行转换,它就会让我多跑48秒。下面仅给出两个版本之间的差异。这里使用的模块是Date::Parse
my $tmst = str2time($each[0]." ".$each[1]);
两个变量来自文件,其中一个是Date,另一个是时间。 有没有人知道进行这种转换的更快方式,
赞赏你的回复
感谢
答案 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') ],
};