能夠操控日期和時(shí)間對于大多數(shù)編程語言來說是基本的能力,Perl也不例外。但是在碰到與時(shí)間相關(guān)的更加復(fù)雜的處理時(shí),Perl自帶的功能常常就顯得力不從心了。在這種情況下,上Perl綜合典藏網(wǎng)(CPAN)看看是一個(gè)好主意,上面有很多隨時(shí)可以使用的Perl模塊,讓開發(fā)人員能夠有效地進(jìn)行日期和時(shí)間操作?;c(diǎn)時(shí)間瀏覽這個(gè)網(wǎng)站看看是否能夠找到一些在下一個(gè)項(xiàng)目里用得上的東西是值得的。
本文列出了Perl CPAN上用來操控日期和時(shí)間的10個(gè)最有趣的模塊,為您下一次轉(zhuǎn)化時(shí)區(qū)和計(jì)算兩個(gè)時(shí)間戳之間的秒數(shù)打下了基礎(chǔ),現(xiàn)在我們就來看看它們。
注:您可以根據(jù)下面提供的方法直接從Internet上安裝CPAN模塊。
Date::Manip
這個(gè)模塊被稱為日期操控模塊的“瑞士軍刀”。它提供的例程可以用來分析和比較日期,提取日期信息,確定日期信息,確定日期/時(shí)間偏量,使用重復(fù)日期和時(shí)間,以及在不同語言里使用日期等。但是它運(yùn)行起來要比其他更加專業(yè)的模塊慢。
當(dāng)您需要一個(gè)通用的日期操控模塊且不特別關(guān)心性能的時(shí)候使用這個(gè)模塊。
DateTime
這個(gè)模塊是Perl的DateTime項(xiàng)目的一部分,它提供了一個(gè)基類,用以“代表日期/時(shí)間的組合”。它是創(chuàng)建自定義日期(Date)對象的最方便的方法,并且包括了用于分析、格式化、計(jì)算持續(xù)時(shí)間和操控時(shí)區(qū)的模塊。
一般來說,在需要本地化或者定義用于時(shí)間信息的自定義存儲容器的時(shí)候,您要將這個(gè)模塊用作創(chuàng)建與日期相關(guān)的新對象。
Time::Format
在需要重新格式化日期和時(shí)間值的時(shí)候,這個(gè)模塊是無可匹敵的——它支持大量格式化代碼,能夠大幅改變?nèi)掌诤蜁r(shí)間的外觀。它同時(shí)接受DateTime對象和Date::Manip字符串,還為加入的控件提供了到POSIX的strftime()函數(shù)的接口。
當(dāng)您需要格式化日期和時(shí)間值的時(shí)候(通常是在將它們顯示給應(yīng)用程序用戶之前)使用這個(gè)模塊。
Time::Interval
這個(gè)模塊對于處理時(shí)間間隔十分有用。它提供的例程可以計(jì)算兩個(gè)時(shí)間戳之間的日、小時(shí)、分鐘和秒的總數(shù)。它還可以輕松地將時(shí)長轉(zhuǎn)換成不同的時(shí)間單位,例如秒、小時(shí),或者分鐘。
當(dāng)您需要計(jì)算兩個(gè)日期值之間所流逝的時(shí)間時(shí)使用這個(gè)模塊。
Date::Convert
這個(gè)模塊提供的例程用于在不同的日期格式(陽歷、儒略歷、猶太歷、伊斯蘭歷和絕對歷)之間轉(zhuǎn)換。它還提供掛鉤用以輕松擴(kuò)展到新的日歷格式。
當(dāng)您需要從一個(gè)日歷格式轉(zhuǎn)換到另外一個(gè)日歷格式的時(shí)候使用這個(gè)模塊。
Benchmark
這個(gè)模塊允許您多次運(yùn)行同一段代碼,計(jì)算執(zhí)行每次運(yùn)行的時(shí)間并返回所取得的平均值。它還可以被用來查看一個(gè)代碼塊可以在固定的時(shí)間窗里運(yùn)行多少次。
在進(jìn)行性能基準(zhǔn)測試,測量某個(gè)代碼塊運(yùn)行的速度,以及收集精確的讀數(shù)以指導(dǎo)您進(jìn)行優(yōu)化的時(shí)候使用這個(gè)模塊。
Time::Normalize
這個(gè)模塊提供的例程用來把任意日期和時(shí)間值格式化成一個(gè)統(tǒng)一的、標(biāo)準(zhǔn)的表示,它然后可以被用來進(jìn)行計(jì)算或者保存。它會對輸入的內(nèi)容進(jìn)行錯(cuò)誤檢查,然后以清楚的格式返回獨(dú)立的時(shí)間和/或日期組件。
當(dāng)您懷疑輸入的日期有錯(cuò)誤并需要在數(shù)據(jù)庫或者應(yīng)用程序里使用它之前“清理干凈”的時(shí)候使用這個(gè)模塊。
Regexp::Common::time
這個(gè)模塊會創(chuàng)建可以用被用來分析日期和時(shí)間的正則表達(dá)式。它支持同時(shí)使用精確的規(guī)則和復(fù)雜的模糊邏輯從字符串值捕捉日期模式。
用這個(gè)模塊從人們易于理解的字符串識別和提取日期信息,并將它轉(zhuǎn)換成機(jī)器可讀的格式(例如ISO 8601)。
MySQL::DateFormat
這個(gè)模塊提供的例程可以把日期和數(shù)字在MySQL的YYYY-MM-DD格式和人們易于理解的字符串之間來回轉(zhuǎn)換。在從/到MySQL數(shù)據(jù)庫取回/添加含有日期信息的記錄時(shí)這個(gè)模塊十分有用。
為了以可讀性更強(qiáng)的方式顯示,或者在將它插入MySQL數(shù)據(jù)庫之前修改用戶提供的日期值,您可以使用這個(gè)模塊來重新格式化MySQL的日期/時(shí)間字符串。
Net::Time
這個(gè)模塊提供了一個(gè)從遠(yuǎn)程客戶端取回日期和時(shí)間信息的客戶端接口。如果您的應(yīng)用程序要總是確保知道當(dāng)前的日期和時(shí)間,以保證系統(tǒng)不被黑客窺探,這就顯得尤其有用。
在通過TCP網(wǎng)絡(luò)從遠(yuǎn)程主機(jī)上取回日期/時(shí)間字符串的時(shí)候要使用這個(gè)模塊。
使用示例:
取得某一日期時(shí)間的信息
方法一
復(fù)制代碼 代碼如下:
use POSIX qw(strftime);
localtime(time() - 24*60*60)
strftime "%Y%m%d%k%M%S",localtime $^T;
方法二
復(fù)制代碼 代碼如下:
use 5.010;
use POSIX qw(strftime);
# These are core modules in Perl 5.10 and newer
use Time::Piece;
use Time::Seconds;
my $yesterday = localtime() - ONE_DAY;
say $yesterday->strftime('%b %d %Y');
您可能感興趣的文章:- perl獲取日期與時(shí)間的實(shí)例代碼