
- Perl 基礎
- Perl - 首頁
- Perl - 簡介
- Perl - 環境
- Perl - 語法概述
- Perl - 資料型別
- Perl - 變數
- Perl - 標量
- Perl - 陣列
- Perl - 雜湊表
- Perl - IF...ELSE
- Perl - 迴圈
- Perl - 運算子
- Perl - 日期與時間
- Perl - 子程式
- Perl - 引用
- Perl - 格式
- Perl - 檔案 I/O
- Perl - 目錄
- Perl - 錯誤處理
- Perl - 特殊變數
- Perl - 編碼規範
- Perl - 正則表示式
- Perl - 傳送郵件
- Perl 高階
- Perl - 套接字程式設計
- Perl - 面向物件
- Perl - 資料庫訪問
- Perl - CGI 程式設計
- Perl - 包與模組
- Perl - 程序管理
- Perl - 嵌入式文件
- Perl - 函式引用
- Perl 有用資源
- Perl - 問答
- Perl - 快速指南
- Perl - 有用資源
- Perl - 討論
Perl - 日期和時間
本章將為您提供關於如何在 Perl 中處理和操作日期和時間的基本理解。
當前日期和時間
讓我們從localtime()函式開始,如果未提供引數,則返回當前日期和時間的數值。以下是localtime函式在列表上下文中返回的9個元素列表:
sec, # seconds of minutes from 0 to 61 min, # minutes of hour from 0 to 59 hour, # hours of day from 0 to 24 mday, # day of month from 1 to 31 mon, # month of year from 0 to 11 year, # year since 1900 wday, # days since sunday yday, # days since January 1st isdst # hours of daylight savings time
嘗試以下示例以列印 localtime() 函式返回的不同元素:
#!/usr/local/bin/perl @months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ); @days = qw(Sun Mon Tue Wed Thu Fri Sat Sun); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); print "$mday $months[$mon] $days[$wday]\n";
執行以上程式碼後,將產生以下結果:
16 Feb Sat
如果您在標量上下文中使用 localtime() 函式,則它將返回系統中設定的當前時區的日期和時間。嘗試以下示例以列印完整格式的當前日期和時間:
#!/usr/local/bin/perl $datestring = localtime(); print "Local date and time $datestring\n";
執行以上程式碼後,將產生以下結果:
Local date and time Sat Feb 16 06:50:45 2013
格林尼治標準時間
gmtime()函式的工作方式與localtime()函式類似,但是返回的值已針對標準格林尼治時間區進行了本地化。當在列表上下文中呼叫時,gmtime 返回的最後一個值 $isdst 始終為 0。格林尼治標準時間沒有夏令時。
您應該注意,localtime() 將返回執行指令碼的機器上的當前本地時間,而 gmtime() 將返回通用格林尼治標準時間,或 GMT(或 UTC)。
嘗試以下示例以列印當前日期和時間,但以格林尼治標準時間為準:
#!/usr/local/bin/perl $datestring = gmtime(); print "GMT date and time $datestring\n";
執行以上程式碼後,將產生以下結果:
GMT date and time Sat Feb 16 13:50:45 2013
格式化日期和時間
您可以使用 localtime() 函式獲取一個包含 9 個元素的列表,然後可以使用printf()函式根據您的要求格式化日期和時間,如下所示:
#!/usr/local/bin/perl ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); printf("Time Format - HH:MM:SS\n"); printf("%02d:%02d:%02d", $hour, $min, $sec);
執行以上程式碼後,將產生以下結果:
Time Format - HH:MM:SS 06:58:52
紀元時間
您可以使用 time() 函式獲取紀元時間,即自給定日期以來經過的秒數,在 Unix 系統中是 1970 年 1 月 1 日。
#!/usr/local/bin/perl $epoc = time(); print "Number of seconds since Jan 1, 1970 - $epoc\n";
執行以上程式碼後,將產生以下結果:
Number of seconds since Jan 1, 1970 - 1361022130
您可以將給定的秒數轉換為日期和時間字串,如下所示:
#!/usr/local/bin/perl $datestring = localtime(); print "Current date and time $datestring\n"; $epoc = time(); $epoc = $epoc - 24 * 60 * 60; # one day before of current date. $datestring = localtime($epoc); print "Yesterday's date and time $datestring\n";
執行以上程式碼後,將產生以下結果:
Current date and time Tue Jun 5 05:54:43 2018 Yesterday's date and time Mon Jun 4 05:54:43 2018
POSIX 函式 strftime()
您可以使用 POSIX 函式strftime()透過下表中的內容來格式化日期和時間。請注意,標有星號 (*) 的說明符取決於區域設定。
說明符 | 替換為 | 示例 |
---|---|---|
%a |
縮寫星期幾名稱 * | Thu |
%A |
完整星期幾名稱 * | Thursday |
%b |
縮寫月份名稱 * | Aug |
%B |
完整月份名稱 * | 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 |
換行符 ('\n' ) |
|
%p |
上午或下午表示 | PM |
%r |
12 小時制時間 * | 02:55:02 pm |
%R |
24 小時制 HH:MM 時間,相當於 %H:%M |
14:55 |
%S |
秒 (00-61 ) |
02 |
%t |
水平製表符 ('\t' ) |
|
%T |
ISO 8601 時間格式 (HH:MM:SS ),相當於 %H:%M:%S |
14:55 |
%u |
ISO 8601 星期幾作為數字,星期一為 1 (1-7 ) |
4 |
%U |
星期數,以第一個星期日為第一週的第一天 (00-53 ) |
33 |
%V |
ISO 8601 星期數 (00-53 ) |
34 |
%w |
星期幾作為十進位制數,星期日為 0 (0-6 ) |
4 |
%W |
星期數,以第一個星期一為第一週的第一天 (00-53 ) |
34 |
%x |
日期表示 * | 08/23/01 |
%X |
時間表示 * | 14:55:02 |
%y |
年份,後兩位數字 (00-99 ) |
01 |
%Y |
年份 | 2001 |
%z |
ISO 8601 與 UTC 的時區偏移量(1 分鐘 = 1,1 小時 = 100) 如果無法確定時區,則無字元 |
+100 |
%Z |
時區名稱或縮寫 * 如果無法確定時區,則無字元 |
CDT |
%% |
% 號 | % |
讓我們檢查以下示例以瞭解其用法:
#!/usr/local/bin/perl use POSIX qw(strftime); $datestring = strftime "%a %b %e %H:%M:%S %Y", localtime; printf("date and time - $datestring\n"); # or for GMT formatted appropriately for your locale: $datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime; printf("date and time - $datestring\n");
執行以上程式碼後,將產生以下結果:
date and time - Sat Feb 16 07:10:23 2013 date and time - Sat Feb 16 14:10:23 2013