您的位置:首页 >> Web开发 >> CGI技术 >> 正文
CGI技术 RSS
 

perl中的日期处理

http://www.rdxx.com 06年04月21日 07:27 网海之贝 我要投稿

关键词: 日期处理 , 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();
常见的日期和时间操作
如果你打算计算两个时刻之间的时间段,只需将它们转换为相应的纪元秒,然后两数相减即可:

$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() 一样。

共4页  第1页 第2页 第3页 第4页


 
 
标签: 日期处理 , Perl , 日期 打印本文
 
 
  热点搜索
 
 
 



Valid XHTML 1.0 Transitional
Copyright ©2005 - 2008 Rdxx.Com,All Rights Reserved
收藏本页
收藏本站