timelocal()是從格式化的時間輸入轉換成秒;而localtime()是從秒轉換成格式化的時間。返回的年份都是對1900的偏移值。
timelocal用法如下:
my $second_str = timelocal($ss,$mi,$hh,$dd,$mm,$yy); our ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime($second_str);$year = $year+1900;
localtime函數,根據它所在的上下文,可以用兩種完全不同的方法來運行。
1、在標量上下文中,localtime函數返回一個格式化很好的當前時間字符串。
例如,print scalar (localtime)這個代碼,它輸出的結果將類似於Thu Sep 16 23:00:06 1999。
2、在列表上下文中,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 如果夏令時有效,則爲真
my ($sec,$min,$hour,$mday,$mon,$year) = (localtime)[0..5]; ($sec,$min,$hour,$mday,$mon,$year) = ( sprintf("%02d", $sec), sprintf("%02d", $min), sprintf("%02d", $hour), sprintf("%02d", $mday), sprintf("%02d", $mon + 1), $year + 1900 ); print "$year-$mon-$mday $hour:$min:$sec\n";
得到的結果是:2018-06-07 09:43:38
strftime函數主要是用來格式化時間的。
print strftime("%Y-%m-%d %H:%M:%S\n", localtime(time));
附上strftime函數的格式參數說明
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等)