在ISO 8601中读取日期后,时间戳不匹配

时间:2014-05-28 17:30:54

标签: perl iso

我的日期为" 2014年5月15日,上午5:39"我正在阅读ISO 8601并写到其他地方 我的代码是

my $dcCreated = "2014-05-15T05:39:54.864Z";
my $iso8601 = DateTime::Format::ISO8601 -> new;
my $dt = $iso8601->parse_datetime( $dcCreated );
my $dayofmonth = $dt->strftime("%d");
$dayofmonth =~ s/^0//;
my $hour = $dt->strftime("%I");
$hour =~ s/^0//;
my $commentDate = $dt->strftime("%b " . $dayofmonth . ", %Y, " . $hour . ":%M %p");

返回值为" 2014年5月15日,上午9:39"

看起来它以DST GMT格式返回,这是提前四个小时。 如何更正GMT偏移量以使结果日期与原始日期匹配。

1 个答案:

答案 0 :(得分:0)

您在GMT中的时间戳,所以代码是正确的。 " 2014-05-15T05:39:54.864Z":尾随Z意味着祖鲁时间又名。 GMT。

祖鲁时间:http://www.navy.mil/navydata/questions/zulutime.html

  

不幸的是,地球不会以完全恒定的速度旋转。   由于各种科学原因和测量精度的提高   地球的自转,一个新的时间尺度,称为协调世界   时间(UTC)已被采用并取代GMT一词。

     

海军以及民航使用的字母是" Z" (音素   "祖鲁")指的是本初子午线的时间。

http://en.wikipedia.org/wiki/ISO_8601

  

UTC的日期和时间:2014-05-25T16:45:49 + 00:00或   2014-05-25T16:45:49Z