【发布时间】:2014-07-24 23:18:07
【问题描述】:
在将它们转换为纪元后,我计算了两个 ISO 8601 日期的差异。 我怎样才能得到它们的天数差异? 我的代码是
my $ResolvedDate = "2014-06-04T10:48:07.124Z";
my $currentDate = "2014-06-04T06:03:36-04:00"
my $resolved_epoch = &convert_time_epoch($ResolvedDate);
my $current_epoch = &convert_time_epoch($currentDate);
if (($resolvedDate - $currentDate) > $noOfDays) {
print "Difference in greater than x\n";
$built = 0;
return ($built);
} else {
print "Difference in smaller than x \n";
$built = 1;
return ($built);
}
sub convert_time_epoch {
my $time_c = str2time(@_);
my @time_l = localtime($time_c);
my $epoch = strftime("%s", @time_l);
return($epoch);
}
这里除了 $built 我还想返回确切的天数,Resolved date 大于 Current date。
【问题讨论】:
-
首先你需要定义你使用的“day”的变体。例如,它是否基于当地日期(所以两次可能相隔 1 秒,但如果是在当地超过午夜,那么它们也相隔 1 天)?
-
还有闰秒呢?如果您想考虑这样的事情,使用 DateTime 而不是幼稚的“自纪元以来的秒数”将为您节省很多的工作。
-
@DeVadder:Unix 纪元通过不递增来处理闰秒,因此在不考虑它们的情况下,日期数学应该可以正常工作。除非您想明确地识别闰秒,否则使用纪元是不可能的。
-
@NeilSlater 嗯,对,但我支持建议 DateTime。 ^^
-
请不要使用
&调用子程序。它们不是必需的,并且可能会产生令人困惑的副作用。