将时代差转换为天数

Posted

技术标签:

【中文标题】将时代差转换为天数【英文标题】: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。 ^^ 请不要使用&调用子程序。它们不是必需的,并且可能会产生令人困惑的副作用。 【参考方案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');

【讨论】:

以上是关于将时代差转换为天数的主要内容,如果未能解决你的问题,请参考以下文章

js 关于时间方面的通用函数(时间格式化,分钟数转换为小时+分钟,计算天数差的函数)

C/C++输入两个任意日期求相隔天数

将年时日期间隔转换为天数

如何将时间戳转换为天数

将整数转换为日期以计算天数

如何计算两个(年-月-日)中间的间隔天数