【问题标题】:Convert epoch difference to number of days将时代差转换为天数
【发布时间】: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。 ^^
  • 请不要使用&调用子程序。它们不是必需的,并且可能会产生令人困惑的副作用。

标签: perl iso epoch


【解决方案1】:

“天数”很尴尬,因为这是本地时间并且存在 DST(或至少可能存在)。

通过简单地除以 86400,您可以轻松获得 24 小时周期数,这可能足以满足您的目的。

如果你想知道mday字段改变的真实次数,这可能与这个简单除法得到的值略有不同。

【讨论】:

    【解决方案2】:

    如果日期以纪元秒为单位,则将其差除以一天中的秒数(即 86400)。像这样:

    my $days_difference = int(($time1 - $time2) / 86400);
    

    如果你使用DateTime 那么

    my $duration = $dt1->delta_days($dt2); #$dt1 and $dt2 are DateTime objects.
    print $duration->days;
    

    【讨论】:

    • Re“一天中的秒数(即86400)”,这不是真的。并非所有日子都有 86400 秒。
    【解决方案3】:
    use DateTime::Format::ISO8601 qw( );
    
    my $ResolvedDate = "2014-06-04T10:48:07.124Z";
    my $currentDate = "2014-06-04T06:03:36-04:00";
    
    my $format = DateTime::Format::ISO8601->new();
    
    my $dt_resolved = $format->parse_datetime($ResolvedDate);
    my $dt_current  = $format->parse_datetime($currentDate);
    
    my $dur = $dt_resolved->delta_days($dt_current);
    my $days = $dur->in_units('days');
    

    【讨论】:

      猜你喜欢
      • 2021-04-07
      • 2015-03-26
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      相关资源
      最近更新 更多