2010-06-24 160 views
7

給定一個表示ISO8601格式日期/時間的字符串(例如20100723T073000),我需要使用一般的strftime格式字符串將其解析爲用戶提供的格式。爲了做到這一點,我需要將ISO8601時間戳轉換爲Unix時間戳。 Perl有大量的日期/時間操作模塊,我有點不知所措。有關如何做到這一點的任何建議?如何在ISO中將ISO8601時間戳轉換爲unix時間?

回答

13

處理日期,時間,持續時間,時區和格式的冠軍模塊是DateTime。獲得DateTime對象後,可以對其執行大量操作,例如添加/減去其他DateTime對象或DateTime::Duration對象,或者以其他格式打印出來。

use strict; use warnings; 
use DateTime; 
use DateTime::Format::ISO8601; 

my $dt = DateTime::Format::ISO8601->parse_datetime('20100723T073000'); 

print $dt->strftime('%F %T'); 

打印:「2010-07-23七時三十分00秒」

4

如果沒有或不想安裝DateTime::Format::ISO8601模塊,您可以分析至少一個子集與HTTP::Date的ISO8601:

$ perl -MHTTP::Date -wle 'print str2time("2013-11-30T23:05:03")' 
1385845503 

與任何日期處理一樣,謹慎處理時區問題。

相關問題