问题:在Perl语言中,我须要转换易读的日期和时间到对应的UNIX时间戳,反之亦然。你可以给我一些将日期及时间转换到UNIX时间戳的Perl代码事例吗?或则相反,转换UNIX时间戳到可读的日期和时间。
当你的Perl脚本须要解决时间信息unix时间戳转换成时间 c,这儿有两种方式来表示和处理日期和时间。一种方式是易读的时间表示(例,"SatMar1410:14:05EDT2015"),另外一种是使用UNIX时间戳(也叫“新纪元时间”),这是从1970年1月1日到今所经过的时间秒数。每一种方式都有它自己的优劣势,取决于你的须要,其实也就须要转换一种格式到另一种。
Perl中转换本地时间到UNIX时间戳
为了从日期字符串中获得UNIX时间,可以使用Date::Parse模块中str2time函数。此函数可以处理多种格式,比如:
use Date::Parse;
my $local_time = "Sat Mar 14 10:14:05 EDT 2015";
# 1426342445 will be stored in $unix_time
my $unix_time = str2time($local_time);
Date:Parse模块支持多种语言(法语,英语unix时间戳转换成时间 c,法语和西班牙语)和时区。比如:
use Date::Parse;
use Date::Language;
my $lang = Date::Language->new('French');
my $unix_time = $lang->str2time("12:14:05, Ago 16, 2014 (CEST)");
Perl中UNIX时间戳到易读的日期和时间
假如你想要转换UNIX时间戳到易读的格式,可以使用localtime函数linux安装,此函数可以转换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);
# necessary conversion of $mon and $year
$mon += 1;
$year += 1900;
print "Current time: $year-$mon-$mday $hour:$min:$secn";
作者:DanNanni译者:VicYu/Vic020校对:wxy
本文由LCTT原创翻译,Linux中国荣誉推出
本文由LCTT原创翻译,Linux中国首发。也想加入译者行列linux软件工程师,为开源做一些自己的贡献么?欢迎加入LCTT!
翻译工作和译文发表仅用于学习和交流目的,翻译工作依照CC合同规定,假如我们的工作有侵害到您的权益,请及时联系我们。
欢迎依照CC合同规定转载,敬请在正文中标明并保留原文/译文链接和作者/译者等信息。