当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/