perl的時(shí)間處理之localtime和strftime
Posted on 2012-03-28 15:09 小白19870626 閱讀(7678) 評(píng)論(0) 編輯 收藏 所屬分類(lèi): linux大家都是使用的 localtime 來(lái)取得當(dāng)?shù)厝掌跁r(shí)間和日期。這個(gè)函數(shù)如果在標(biāo)量環(huán)境時(shí),會(huì)以字符串的形式來(lái)傳回目前的時(shí)間和日期 。默認(rèn)的 localtime 的函數(shù)是以 1970 到今天的秒來(lái)做整數(shù)計(jì)算的。默認(rèn)這個(gè)程序會(huì)調(diào)用 time 的函數(shù)來(lái)給它提供一個(gè)值。
使用方法:
例如,print scalar (localtime)這個(gè)代碼,它輸出的結(jié)果將類(lèi)似于Thu Sep 16 23:00:06 1999。在列表上下文中,localtime將返回能夠描述當(dāng)前時(shí)間的一個(gè)元素列表:
($sec,$min,$hour,$mday,$mon,$year_off,$wday,$yday,$isdat) = localtime;
字段 值
$sec 秒,0 ~ 59
$min 分,0 ~ 59
$hour 時(shí),0 ~ 23
$mday 月份中的日期, 1 ~ 2 8、2 9、3 0或3 1
$mon 年份中的月份, 0 ~ 11(這里請(qǐng)?zhí)貏e要小心)
$year_off 1900年以來(lái)的年份。將1900加上這個(gè)數(shù)字,得出正確的4位數(shù)年份
$wday 星期幾,0 ~ 6
$yday 一年中的第幾天,0 ~ 364或365
$isdst 如果夏令時(shí)有效,則為真
不要將19附加給localtime返回的年份。它返回的年份是1900的偏移量。比如,在1999年,年份是99;在2000年中,它是100,將 1999與該值相加,可以在2000年以后正確地產(chǎn)生年份。perl不存在2000年問(wèn)題,但是,如果簡(jiǎn)單地將19(或20)附加給該年份,就會(huì)導(dǎo)致程序中產(chǎn)生2000年問(wèn)題真正的年月日 就是: $year_off + 1900 , $mon+1,$mday
上面這個(gè)函數(shù)常用,但是返回值非常亂,可讀性非常不好,讓我們很容易出錯(cuò),所以我推薦 strftime 這個(gè)時(shí)間函數(shù)。當(dāng)然,還有另一個(gè)模塊 DataTime 也相當(dāng)不錯(cuò)。不過(guò) strftime 非常象 Linux 常用的 date 的命令。strftime 是 C 中 POSIX 的一個(gè)功能函數(shù)。被包含進(jìn)了 Perl 中。好象 PHP 也是支持的
使用起來(lái)很容易,如下:
#!/usr/bin/perl use strict; use warnings; use POSIX qw(strftime); print strftime("%Y-%m-%d %H:%M:%S\n", localtime(time));
會(huì)輸出
2010-08-21 07:44:24
Strftime 時(shí)間域 這個(gè)和 date 的命令的字符格式是一樣的)
% H 小時(shí)(00..23)
% I 小時(shí)(01..12)
% k 小時(shí)(0..23)
% l 小時(shí)(1..12)
% M 分(00..59)
% p 顯示出AM或PM
% r 時(shí)間(hh:mm:ss AM或PM),12小時(shí)
% s 從1970年1月1日00:00:00到目前經(jīng)歷的秒數(shù)
% S 秒(00..59)
% T 時(shí)間(24小時(shí)制)(hh:mm:ss)
% X 顯示時(shí)間的格式(%H:%M:%S)
% Z 時(shí)區(qū) 日期域
% a 星期幾的簡(jiǎn)稱(chēng)( Sun..Sat)
% A 星期幾的全稱(chēng)( Sunday..Saturday)
% b 月的簡(jiǎn)稱(chēng)(Jan..Dec)
% B 月的全稱(chēng)(January..December)
% c 日期和時(shí)間( Mon Nov 8 14:12:46 CST 1999)
% d 一個(gè)月的第幾天(01..31)
% D 日期(mm/dd/yy)
% h 和%b選項(xiàng)相同
% j 一年的第幾天(001..366)
% m 月(01..12)
% w 一個(gè)星期的第幾天(0代表星期天)
% W 一年的第幾個(gè)星期(00..53,星期一為第一天)
% x 顯示日期的格式(mm/dd/yy)
% y 年的最后兩個(gè)數(shù)字( 1999則是99)
% Y 年(例如:1970,1996等)
常用的實(shí)例
得到日期的全部
perl -MPOSIX -le 'print strftime "%c", localtime();'
Sat 21 Aug 2010 07:54:34 AM CST
得到普通的指定的日期
perl -MPOSIX -le 'print strftime "%a %d %b %Y %H:%M:%S %Z", localtime();'
Sat 21 Aug 2010 07:54:11 CST
得到一個(gè)小時(shí)以前的時(shí)間
perl -MPOSIX -le 'print strftime "%c", localtime(time()-3600);'
Sat 21 Aug 2010 06:55:54 AM CST
得到一天前的時(shí)間
perl -MPOSIX -le 'print strftime "%c", localtime(time()-86400);'
Fri 20 Aug 2010 07:56:36 AM CST
小白