2011-03-16 44 views
1

我昨天的日期是201103116获取perl中的时间戳

我想在perl中获取昨天的starttime时间戳和endtime时间戳。

+0

如果你只是想要一个unix时间戳,使用'time'。 –

回答

3

Perl的核心方法是:

my ($y, $m, $d) = unpack 'A4 A2 A2', $date; 
my $start_ts  = POSIX::mktime(0, 0, 0, $d,  $m - 1, $y - 1900); 
my $end_ts  = POSIX::mktime(0, 0, 0, $d + 1, $m - 1, $y - 1900); 

看到POSIX

而且随着mktime这是完全没有问题,只是增加底片值。所以,如果你需要有23:59:59作为结束日期在评论中建议,你可以用这个解决起来:

my $end_ts = POSIX::mktime(-1, 0, 0, $d + 1, $m - 1, $y - 1900); 

(虽然,我只是想指出,排除端点在编程中不是未知的情况。)

+0

技术上'$ end_ts'是第二天的第一个时间戳。如有必要,可以通过减1来轻松修复。 – Anomie

2

我不明白你的问题。不过,看看DateTime

+0

在客户端系统中,没有安装Datetime和Posix不工作,也没有可能使用安装日期时间模块,所以有可能,结合linux命令和perl代码片段,somthing行日期“%YM% D“+%s – Bharanikumar

+0

@Bharanikumar - POSIX是每个perl5安装包含的核心模块 – bvr

+0

但我尝试了mktime(),但没有工作,如果我的服务器,然后我可以检查,但它的客户端机器无法提出问题 – Bharanikumar

7

使用DateTime

use DateTime; 

my $start = DateTime->now(time_zone => 'local')->subtract(days => 1) 
       ->set(hour => 0, minute => 0, second => 0); 
my $end = $start->clone()->add(days => 1, seconds => -1); 

print $start,  " - ",$end,"\n";   # 2011-03-15T00:00:00 - 2011-03-15T23:59:59 
print $start->epoch," - ",$end->epoch,"\n";  # 1300147200 - 1300233599 
+1

这将不一定会得到你今天的日期。为此,请将' - > now'改为' - > now(time_zone =>'local')'。 – ikegami

+0

@ikegami - 感谢您的建议,修正 – bvr