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函数主要是用来格式化时间的。

  1. print strftime("%Y-%m-%d %H:%M:%S\n", localtime(time));
  2. 附上strftime函数的格式参数说明

  3. 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等)