快速业务通道

Perl处理日期时间的技巧

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-15

use Time::Local;
@months{qw(Jan Feb Mar Apr May Jun
Jul Aug Sep Oct Nov Dec)} = (0..11);
Perl处理日期时间的技巧 - 凌众科技
快速业务通道

Perl处理日期时间的技巧

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-15
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

= “19 Dec 1997 15:30:02″;
/(\d\d)\s+(\w+)\s+(\d+)\s+(\d+):(\d+):(\d+)/
or die “Not a date”;
$mday = $1;
$mon = exists($months{$2}) ? $months{$2} : die “Bad month”;
$year = $3 - 1900;
($h, $m, $s) = ($4, $5, $6);
$epoch_seconds = timelocal($s,$m,$h,$mday,$mon,$year);
一个更通用些的方法,是从CPAN安装Date::Manip 模块。
use Date::Manip;
$epoch_seconds = UnixDate(”19 Dec 1997 15:30:02″,”s”);
注意,由于 Date::Manip是个大模块,使用该模块时,将会增加你的程序的启动时间。其中一个原因是 Date::Manip将对多种不同的格式进行识别,如:
“today”
“now”
“first sunday in april 2000″
“3:15, today”
“3:15pm, first sunday in april 2000″
“2000/01/18 09:15″Date Manipulation
2036, 2037, 2038, …, 1901?!
大多数C程序把纪元秒存为有符号整数,可表示正的和负的日期,但计算机存储器所表示的整数大小是有限的,用有限的位数来表示秒。这就是说,我们在计算纪元秒时,所表示的日期是有限制的。
确切的限度取决于你的机器所能表示的整数的位数。 Perl最多以32位的长度存储整数。粗略地讲,有一位用来表示正负号,其余31位来表示数。如果8位,你可以存储的最大数是255,即2的8次方减1。故Perl中所存储的32位符号数中的最大数为:
print 2**31-1, “\n”;
2147483647
这个数字对应了哪个日期呢?
print scalar(gmtime 2**31-1), “\n”;
Tue Jan 19 03:14:07 2038
在那个时刻的1秒之后会发生什么呢?
print scalar(gmtime 2**31), “\n”;
Fri Dec 13 20:45:52 1901
啊!发生了什么?对于32位有符号整数来说, 2**31太大了。它”翻卷过去了”,其符号位被置为负号,因而成为了所能表示的最大负数。这对应于1970年开始时刻之前的秒的最大值。
其结果说明了什么呢?你不能存储gmtime(2**31)之前或gmtime(2**31-1)之后的以纪元秒表示的日期。
你可千万不要想不开,这可不是什么大问题。如果你要用到32位有符号整数表示的纪元秒以外的时间,你只需要改变你的表示方式,你可从CPAN中找到不少日期模块,其中的Date::Calc 和Date::Manip 很可能是功能最强的两个模块。
这两个模块使

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号