【问题标题】:How to calculate the number of days between 2 unix timestamps in perl?如何计算perl中2个unix时间戳之间的天数?
【发布时间】:2013-04-22 03:58:03
【问题描述】:

有任何简单的方法可以计算 perl 中两个 unix 时间戳之间的天数, 例如,$time1= 1366601846 和 $time2 = 1366431011,所以输出是 2 天。

即使两个unix时间戳之间的差异只有两秒,也应该被视为1天的差异。

之前谢谢..

【问题讨论】:

  • 你不能只取差除以24*60*60
  • 正如你所说,有一些简单的方法可以做到这一点。您还在寻找什么?
  • 您是否要查找日期差异?如果是这样,日期在哪里? (“本地”是一个可以接受的答案。)
  • 是的,我尝试查找日期差异,而不是小时或秒。

标签: perl unix-timestamp


【解决方案1】:

在欧洲/巴黎,这两个时间戳是

2013/04/20 06:10:11
2013/04/22 05:37:26

不清楚你想要什么。

在欧洲/巴黎,时差为 1 天 23 小时 15 分钟。凑整,就是2天。如果这是你想要的,你可以使用

use DateTime qw( );

my $dt1 = DateTime->from_epoch( epoch => 1366601846, time_zone => 'local' );
my $dt2 = DateTime->from_epoch( epoch => 1366431011, time_zone => 'local' );

my ($days, $minutes, $ns) = ($dt1 - $dt2)->in_units(qw( days minutes nanoseconds ));
++$days if $minutes || $ns;

print("$days\n");

在欧洲/巴黎,日历日期相差 2 天。如果这是你想要的,你可以使用

use DateTime qw( );

my $dt1 = DateTime->from_epoch( epoch => 1366601846, time_zone => 'local' );
my $dt2 = DateTime->from_epoch( epoch => 1366431011, time_zone => 'local' );

my $days = $dt1->delta_days($dt2)->in_units('days');

print("$days\n");

除以 24*60*60 并不总是有效,无论您的意思是什么。在这两种情况下,答案都取决于您指定的时区。

【讨论】:

    【解决方案2】:

    要获取两个 unix(纪元)日期之间天数差的浮点数,请尝试以下操作:

    $days = abs ($time1 - $time2) / 86400;

    Unix 时间戳(或纪元时间戳)衡量自 1970 年 1 月 1 日凌晨 12 点 UTC 以来的秒数,因此原始差异是以秒为单位的差异。 86400 是一天中的总秒数(60 分钟 * 60 秒 * 24 小时),上面的结果是天数的差异。

    但是,仅此一项就会给您留下一个很长的浮点数,您可能希望使用以下任一方法对其进行修剪: Posix 模块中的 ceil() 或 floor() ,或者简单地使用 printf 或 sprintf 来更改变量值本身:

    printf("%.0f", $days);

    $days = sprintf("%.0f", $days);

    【讨论】:

    • 24*60*60 不是一天的秒数。有些日子有更多,有些日子更少。
    猜你喜欢
    • 2015-03-14
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多