Perl 時間日期
本章節我們為大家介紹 Perl 語言對時間日期的處理。
Perl中處理時間的函數有以下幾種:
#1、time() 函數:從1970年1月1日傳回起累計的秒數
2、localtime() 函數:取得本地時區時間
##3 、gmtime() 函數: 取得格林威治時間
目前時間和日期接下來讓我們看下
localtime( ) 函數,該函數在沒有參數的情況下傳回目前的時間和日期。
以下9 個符號代表不同的時間日期參數:sec, # 秒, 0 到 61 min, # 分钟, 0 到 59 hour, # 小时, 0 到 24 mday, # 天, 1 到 31 mon, # 月, 0 到 11 year, # 年,从 1900 开始 wday, # 星期几,0-6,0表示周日 yday, # 一年中的第几天,0-364,365 isdst # 如果夏令时有效,则为真實例示範如下:
#!/usr/bin/perl @months = qw( 一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月 ); @days = qw(星期天 星期一 星期二 星期三 星期四 星期五 星期六); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); print "$mday $months[$mon] $days[$wday]\n";以上實例執行輸出結果為:
12 六月 星期天如果直接呼叫localtime() ,它傳回系統當期設定時區的時間,實例如下:
#!/usr/bin/perl $datestring = localtime(); print "时间日期为:$datestring\n";以上實例執行輸出結果為:
时间日期为:Sun Jun 12 11:27:31 2016
格林威治時間(GMT)函數
gmtime() 與localtime() 類似,但它會傳回標準格林威治時間。
#!/usr/bin/perl $local_datestring = localtime(); print "本地时间日期为:$local_datestring\n"; $gmt_datestring = gmtime(); print "GMT 时间日期为:$gmt_datestring\n";以上實例執行輸出結果為:
本地时间日期为:Sun Jun 12 11:32:14 2016 GMT 时间日期为:Sun Jun 12 03:32:14 2016從實例中我們可以看出,中國的時間和格林威治時間相差了8小時。
格式化日期和時間我們可以使用 localtime() 函數的 9 個時間元素來輸出需要製定的格式時間。格式化輸出使用printf() 函數:
#!/usr/bin/perl ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); printf("格式化时间:HH:MM:SS\n"); printf("%02d:%02d:%02d", $hour, $min, $sec);以上實例執行輸出結果為:
格式化时间:HH:MM:SS 11:35:23
新紀元時間(Epoch Time)我們可以使用 time( ) 函數來取得新紀元時間,函數傳回從1970年1月1日起累計的秒數。實例如下:
#!/usr/bin/perl $epoc = time(); print "从1970年1月1日起累计的秒数为:$epoc\n";以上實例執行輸出結果為:
从1970年1月1日起累计的秒数为:1465702883我們可以輸出一個我們想要的時間格式:
#!/usr/bin/perl ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); print "当期时间和日期:"; printf("%d-%d-%d %d:%d:%d",$year+1990,$mon+1,$mday,$hour,$min,$sec); print "\n"; $epoc = time(); $epoc = $epoc - 24 * 60 * 60; # 一天前的时间秒数 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($epoc); print "昨天时间和日期:"; printf("%d-%d-%d %d:%d:%d",$year+1990,$mon+1,$mday,$hour,$min,$sec); print "\n";以上實例執行輸出結果為:
当期时间和日期:2106-6-12 11:49:28 昨天时间和日期:2106-6-11 11:49:28
POSIX 函數strftime()函數strftime() 可以將時間格式化為我們想要的格式。 下表列出了一些格式化的符號,* 號表示想要依賴本地時間:
符號 | 描述 | 實例 |
---|---|---|
%a | #星期幾的簡稱( Sun..Sat) * | Thu |
#%A | 星期幾的全名( Sunday..Saturday) * | Thursday |
%b | 月的簡稱(Jan..Dec) * | Aug |
%B | 月的全名(January..December) * | August |
#%c | 日期與時間* | Thu Aug 23 14:55:02 2001 |
%C | #年份除於100 ,並取整(00-99 ) | 20 |
%d | ##一個月的第幾天(01-31) | 23
|
%D
| 日期, MM/DD/YY 相等於 %m/%d/%y
| 08/23/ 01
|
%e
| #一個月的第幾天,使用空格填入個位數( 1-31) | 23
|
#%F
| YYYY-MM-DD 的簡寫類似於 %Y-%m-%d
| 2001-08-23
|
|
|
|
| #%g | |
00-99) | 01
| ##%g |
2001 |
| %h 月的簡稱* (和 | %b
#Aug |
| %H 24 小時制( | 00-23
14 | ##%I | 12 小時制( 01-12 | )
02
| %j | 一年的第幾天( 001-366 | )
235
| %m | 月( 01-12 | )
08 | %M | 分鐘( 00-59 | )
55
| %n
| 新行(|
| ##%p | |
##PM
|
| |
時間(hh:mm:ss AM或PM),12小時
* | 02:55:02 pm
| #%R |
HH:MM 時間格式,相等於 %H:%M | #14:55 |
| ##%S
秒數(00-61 ) | 02 | ##%t |
'\t') |
| %T
| 時間(24小時制)(hh:mm:ss),相等於
%U | 一年中的第幾週,星期日為第一天(00-53 ) | #33 |
%V | #ISO 8601 第幾週(00-53 ) | 34 |
%w | 一個星期的第幾天(0代表星期日) ( 0-6 ) | 4 |
#%W | 一年的第幾個星期,星期一為第一天(00-53 ) | #34 |
%x | 顯示日期的格式(mm/dd/yy) * | #08/23/01 |
%X | 顯示時間格式* | 14:55:02 |
%y | 年,兩位數(00-99 ) | 01 |
##%Y
| 年2001
| |
%z
| ISO 8601與UTC的時區偏移(1 minute=1, 1 hour=100)
| |
目前時區的名稱,如"中國標準時間" * |
| CDT
|
| % 符號 | %
|
#!/usr/bin/perl use POSIX qw(strftime); $datestring = strftime "%Y-%m-%d %H:%M:%S", localtime; printf("时间日期 - $datestring\n"); # GMT 格式化时间日期 $datestring = strftime "%Y-%m-%d %H:%M:%S", gmtime; printf("时间日期 - $datestring\n");
以上實例執行輸出結果為:
时间日期 - 2016-06-12 12:15:13 时间日期 - 2016-06-12 04:15:13