如何检查UNIX时间是否早1天
代表:UNIX时间是1308715355
我想发现那个时间已经过了1天或者现在没有了
答案 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'