温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Perl语言中处理Perl日期时间的方法

发布时间:2021-07-21 23:35:39 来源:亿速云 阅读:405 作者:chen 栏目:开发技术

这篇文章主要讲解了“Perl语言中处理Perl日期时间的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Perl语言中处理Perl日期时间的方法”吧!

处理Perl日期时间的技巧

Perl日期时间中表现日期的方法多种多样:

“18 Jan 1973″ ,”18/01/1973″ ,”01/18/1973″ ,”Jan 18 1973″ ,”18-01-73″ ,”18-01-1973″ ,”01/73″,其中一些格局含义不清(如”01-06-1973″是表现6月1日呢,还是表现1月6日呢?) 假如不规定日期的表现情势,是很难处理的。

想懂得”18 Jan 1973″和”6 Sep 1950″之间的差别,需要把它们转换为数字表现。Unix 内部应用纪元秒表现时间。日期和时间加起来表现之自格林威志时间1970年1月1日午夜时分(纪元)到当前时刻之间的秒数。”18 Jan 1973″ (假定为午夜时分) 的纪元秒为96163200。在该系统中,午夜表现一天的开端时刻。

让我们天生一个日期通过Perl中供给的gmtime函数,你可以自己来验证这点。给定一个用以表现自从纪元以来的秒数的整数,通过gmtime函数可以盘算出代表相应的日期和时刻,例如:
perl -le ‘print scalar gmtime 96163200′
Thu Jan 18 00:00:00 1973
调用 gmtime() 函数,你会得到一系列值的列表,包含时,分,秒, 日期,月份,年份等等。
perl -le ‘print join(”,”, gmtime 96163200)’
0,0,0,18,0,73,4,17,0
前面3个0分辨表现秒,分,时。小时是从0-23,故下午是12时往后。第4个数表现该月中的天数(本例中为18号)。第5个数表现月份,从0开端(代表1月份)。之所以从0开端,是由于月份对应着月份数组的下标:
@months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); $month = (gmtime 96163200)[4]; # “Jan”

◆年份 (本例中为73)的表现有点特别它并不是年份的***两位数字。它表现从1900年开端的年份。为什么要这样表现呢?这是由于 C语言就是这样处理的。Perl试图使得其库和系统调用尽量接近把持系统的处理方法。
所以,假如你想输出4位数的年份,表现如下:
$year = (gmtime 96163200)[5] + 1900;
假如你不懂得这种处理方法,就会制作出Y2K标题,你也许会这样写:
$year = “19″ . (gmtime 96163200)[5];
# 出错! 2000年将变为19100

对于gmtime()函数的返回值还没有先容完,还有4, 17, 和 0这3个数。它们分辨表现一星期中的第几天 (星期日为0),一年中的第几天(0 表现一年中的***天), 以及是否采用夏时制(表现不采用,正数表现采用,负数表现不可知)。
Perl中的time() 函数返回以纪元秒情势表现确当前日期和时间。假如你打算把它转换为字符串,就可应用gmtime() 和localtime() 函数:
$now = localtime(time());
($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = localtime(time());
假如调用 localtime() 或gmtime() 时不带参数,它将自己调用time()
$now = localtime();
($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = localtime();

Perl日期时间中常见的日期和时间把持

◆假如你打算盘算两个时刻之间的时间段,只需将它们转换为相应的纪元秒,然后两数相减即可:
$difference_in_seconds = $later_datetime -$earlier_datetime;

要把秒转换为分,时,或天数,只需要分辨将它们除以60, 3600 和 86400 即可:
$difference_in_minutes = $difference_in_seconds / 60;
$difference_in_hours = $difference_in_seconds / 3600;
$difference_in_day = $difference_in_seconds / 86400;

反过来做,你也可以答复如下标题:”4天后是几号?”:
$then = time() + 86400 * 4;
print scalar localtime $then;
它给出的答案准确到秒。例如,假如4天后的纪元秒值为932836935, 你可以输出日期的字符串如下;
Sat Jul 24 11:23:17 1999

◆假如你打算输出那个日期的午夜时分 (如”Sat Jul 24 00:00:00 1999″) 应用如下模块:$then = $then - $then % 86400;      # 往掉那个日期的尾巴
类似地,你可以用四舍五进法,输出最靠近午夜时分的日期:
$then += 43200; # add on half a day
$then = $then - $then % 86400;# truncate to the day

◆假如你的时区间隔GMT为相差偶数个小时,这就管用了。并不是所有的时区都是很轻易处理的。你所真正需要的是在你自己的时区内盘算纪元秒,而不是在GMT中盘算。
Perl 中的名为Time::Local的模块,可以供给两个函数 timelocal() 和timegm()。其返回值同 localtime() 和gmtime() 一样。

use Time::Local;  $then = time() + 4*86400;  $then = timegm localtime $then;  # local epoch seconds  $then -= $then % 86400;  # truncate to the day  $then = timelocal gmtime $then;  # back to gmt epoch seconds  print scalar localtime $then, “\n”;

感谢各位的阅读,以上就是“Perl语言中处理Perl日期时间的方法”的内容了,经过本文的学习后,相信大家对Perl语言中处理Perl日期时间的方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI