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