大佬教程收集整理的这篇文章主要介绍了perl – Windows 7夏令时错误?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
奇怪的是,这似乎适用于今年和其他近年来,但如果我尝试回到2000年,例如,Perl似乎认为过渡发生在错误的一天!
根据谷歌的说法,夏令时于2000年4月2日开始:
…但由于某种原因,下面的Perl代码似乎不同意:
use POSIX qw(strftime); use Time::Local; # 03/12/2000 01:59:59 ($year,$month,$day,$hour,$minute,$second) = (2000,3,12,1,59,59); $epoch = timelocal($second,$month - 1,$year); # Print the time print strftime "%m/%d/%Y %H:%M:%S - %Z\n",localtime($epoch); # 03/12/2000 02:00:00 ($year,2,0); $epoch = timelocal($second,localtime($epoch);
输出:
03/12/2000 01:59:59 - Eastern Standard Time 03/12/2000 03:00:00 - Eastern Daylight Time
为什么Perl认为2000年的夏令时开始于3月12日,那显然这是不正确的?
编辑:
阅读下面的评论后,看起来这可能是操作系统的问题,而不是Perl.看起来这可能是Windows 7中的一个错误.
FileTimeToLocalFileTime
和
LocalFileTimeToFileTime
Win32函数时,这种错误通常发生在Windows上.这些功能不考虑时区的历史记录,只考虑当前规则.该文档解释了该做什么:
对于反函数应该使用类似的序列,使用TzSpecificLocalTimeToSystemTime作为中间步骤.
您正在运行的Perl版本可能正在将这些函数作为localtime和timelocal函数的Win32实现的一部分进行调用.根据问题中的评论,有些人无法重现您的结果,我猜想Perl的新版本可能已经如上所述进行了修补.如果没有,他们应该是. (我确信更熟悉Perl内部的人可以指出具体的代码和错误报告.)
以上是大佬教程为你收集整理的perl – Windows 7夏令时错误?全部内容,希望文章能够帮你解决perl – Windows 7夏令时错误?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。