如何在Perl中排序时间戳?
问题描述:
我有几千个对象,其格式为"yyyy-MM-ddTHH:mm:ssZ"
。我想按时间排序这些对象。如何在Perl中排序时间戳?
这是否有任何有用的软件包或脚本?
(目前我只是比较个别的数值,似乎它不是很有效,整洁。)
答
您可以使用Time :: Local将日期转换为时间戳或从cpan中的Date :: modules之一。你可以看看this看看有什么可用的。
还要注意的是,使用上面的格式排序对象lexicographicaly也会做的伎俩(即使可能比比较数字稍慢,但初始转换有成本)。
如果您使用来自世界各地的日期,请小心,因为您可能会遇到与时区和夏令时有关的排序问题。如果所有的日期时间都在同一个地方,应该可以。
答
sort
没有排序功能按字典顺序排序。它满足您的需求。
@sorted = sort @timestamps;
答
如果您的字符串格式严格,您可以使用以下子例程来整理日期列表。
sub timeSort {
my ($time) = (shift =~ /\d{2}:\d{2}:\d{2}/);
return $time;
}
my @sortedList = sort { timeSort($a) <=> timeSort($b) } @oldList;
+0
'$ _ [0]'而不是使用'shift'可能会更快(因为它会被多次调用)。否则,我就是这么做的。 – 2010-03-21 15:52:57
您是指比较TTT的值,MM的值等。如果是这样,你indead需要将完整的字符串转换为时间戳值... – kriss 2010-03-21 15:08:49