讲Perl中的本地时间与UNIX时间戳间相互转换的方法
当你的Perl脚本需要解决时间信息,这里有两种方法来表示和处理日期和时间。一种方法是易读的时间表示(例,"SatMar1410:14:05EDT2015"),另外一种是使用UNIX时间戳(也叫“新纪元时间”),这是从1970年1月1日到今所经过的时间秒数。每一种方法都有它自己的优劣势,取决于你的需要,也许也就需要转换一种格式到另一种。
Perl中转换本地时间到UNIX时间戳
为了从日期字符串中获得UNIX时间,可以使用Date::Parse模块中str2time()函数。此函数可以处理多种格式,例如:
SatMar1410:14:05EDT2015 3/14/201510:14:05-0400 14/Mar/1510:14:05 14Mar1510:14:05 useDate::Parse; my$local_time="SatMar1410:14:05EDT2015"; #1426342445willbestoredin$unix_time my$unix_time=str2time($local_time);
Date:Parse模块支持多种语言(英语,法语,德语和意大利语)和时区。例如:
useDate::Parse; useDate::Language; my$lang=Date::Language->new('French'); my$unix_time=$lang->str2time("12:14:05,Ago16,2014(CEST)");
Perl中UNIX时间戳到易读的日期和时间
如果你想要转换UNIX时间戳到易读的格式,可以使用localtime()函数,此函数可以转换UNIX时间戳为一个9元素列表。然后你可以使用返回的list构造任何你需要的可读格式。这里有一个代码片段:
#$sec,$min,$hour:秒,分,时 #$mday:月中的某天(0-31) #$mon:月份,范围0(一月)至11(十二月) #$year:年份,与1900年的差值(2015年为2015-1900=115) #$wday:星期,范围0(星期天)至6(星期六) #$yday:年中的某天,范围0至364(或365闰年) #$isdst:是否是夏令时 my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($unix_timestamp); #necessaryconversionof$monand$year $mon+=1; $year+=1900; print"Currenttime:$year-$mon-$mday$hour:$min:$sec\n";