如何检查unix时间是1天之前

时间:2011-06-28 16:45:29

标签: perl bash

如何检查UNIX时间是否早1天

代表:UNIX时间是1308715355

我想发现那个时间已经过了1天或者现在没有了

4 个答案:

答案 0 :(得分:10)

如果您认为2011-06-27T01:05比2011-06-28T01:00还要早一天,

use DateTime;

my $epoch = '1308715355';

my $dt_ref = DateTime->from_epoch(epoch => $epoch, time_zone => 'local');
my $dt_now = DateTime->now(time_zone => 'local');

$dt_ref->add(days => 1);
if ($dt_ref <= $dt_now) {
   # At least one day old.
}

如果您认为2011-06-27比2011-06-28年龄大一天,无论何时,

use DateTime;

my $epoch = '1308715355';

my $dt_ref = DateTime->from_epoch(epoch => $epoch, time_zone => 'local')
   ->truncate( to => 'days' );
my $dt_now = DateTime->today(time_zone => 'local');

$dt_ref->add(days => 1);
if ($dt_ref <= $dt_now) {
   # At least one day old.
}

更新:语法错误修复:s /旧/早于/

答案 1 :(得分:4)

> date -dtomorrow +%s; date +%s
1309366474
1309280074

这应该处理,提到了埃文提到的DST问题。

你没有提到你想要的解决方案空间,所以希望这就足够了。

答案 2 :(得分:2)

与一天的秒数相比通常是足够的(60 * 60 * 24 = 86400)。但是,如果这始终需要完全正常工作,则需要在切换到DST和从DST切换时考虑。那些日子是23&amp; 25个小时。

大多数人倾向于忽视夏令时。如果在处理时间时需要精确度,这可能会导致很多问题。

答案 3 :(得分:2)

use strict;
use warnings;
use DateTime;

my $epoch = '1308715355';

my $dt = DateTime->from_epoch(epoch => $epoch, time_zone => 'local')
                 ->add(days => 1);
print $dt; # '2011-06-22T23:02:35' -- for *my* time zone (CDT)
print $dt->epoch; # '1308801755'