我有一个数组:
my @array = ( "\"Passing\" on Wed 12 Jan 2015 09:19:14 AM PST",
"\"Passing\" on Wed 12 Jan 2015 09:19:25 AM PST",
"\"Test Activation\" on Tues 14 Jan 2015 12:05:14 PM PST",
"\"Run Phase\" on Tues 14 Jan 2015 12:06:14 PM PST",
"\"Test Activation\" on Tues 13 Jan 2015 11:43:12 PM PST")
我要删除重复的字符串行,但要保留最新的。所以我希望它看起来像:
my @array = ("\"Passing\" on Wed 12 Jan 2015 09:19:25 AM PST",
"\"Test Activation\" on Tues 14 Jan 2015 12:05:14 PM PST",
"\"Run Phase\" on Tues 14 Jan 2015 12:06:14 PM PST")
我想不出一种简单的方法...我正在考虑使用一些正则表达式比较字符串(/\".*\"/)并删除发现的重复项,但是我不确定如何处理日期/时间。
任何建议都是最欢迎的!
有几个选项可以分析和比较日期。最简单的方法是使用内置的Time :: Piece。使用strptime进行解析并与进行比较$time->epoch
。
不幸的是,缩写的时区名称是不明确的。PST可以表示美国太平洋标准时间或菲律宾标准时间。这可能会导致strptime的%Z格式阻塞YMMV。从我的strptime手册页...
%Z格式说明符仅接受本地时区的时区缩写或值“ GMT”。此限制是由于时区缩写的过载导致的歧义。这样的例子之一就是EST,它既是美国东部标准时间,又是澳大利亚东部夏令时间。
您可能需要预处理日期格式,然后将其转换为时区偏移量。您可以为此使用Time :: Zone及其明显的北美偏向。
use Time::Zone;
use Time::Piece;
my $offset = sprintf "%+d", (tz_offset("PST") / 60 / 60);
my $time = Time::Piece->strptime(
"Wed 12 Jan 2015 09:19:14 AM $offset",
"%a %d %b %Y %I:%M:%S %p %z"
);
print $time->datetime, "\n";
print $time->epoch, "\n";
但是先尝试%Z,看看它是否有效。
提取日期也留作练习。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句