当DST向前“跳”时,至少有一个时区从23:59:59跳到1:00:00。有谁知道它是什么?

以下内容通常会获取今天的日期,但是对于符合上述条件的时区,一年中的一天会失败。

$ perl -MDateTime -E'say DateTime->today( time_zone => $ARGV[0] )->ymd;' \
   America/New_York
2013-08-28


我需要时区进行测试。我不是想让上面的代码正常工作。

最佳答案

有几个。截至2020-04年,在10个国家/地区中有14个此类时区:巴拉圭,古巴,智利,格陵兰/丹麦,约旦,黎巴嫩,叙利亚,巴勒斯坦,伊朗和亚速尔群岛/葡萄牙。

在2019-04之前,该列表包括使用America/Sao_Paulo时区的Brazil

$ perl -MDateTime -E'say DateTime->new(
     year => 2013, month => 10, day => 20, hour => 12,
     time_zone => "America/Sao_Paulo")->truncate( to => "day" )->ymd;'
Invalid local time for date in time zone: America/Sao_Paulo


您可以通过在获取日期之前切换到“浮动” tome区域来解决此问题:

$ perl -MDateTime -E'say DateTime->new(
     year => 2013, month => 10, day => 20, hour => 12,
     time_zone => "America/Sao_Paulo")
   ->set_time_zone("floating")
   ->truncate( to => "day" )
   ->ymd;'
2013-10-20


请参见this documentation

关于timezone - 没有午夜的一天,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18489927/

10-10 20:37