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等)
转载于:https://blog.51cto.com/yuqian2203/2125836