2011-03-16 42 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