至少有一個時區從23:59:59跳過到1:00:00當「向前發展」的DST時。有誰知道它是什麼?沒有午夜的一天
以下通常會得到今天的日期,但對於符合上述標準的時區,一年中的某一天會失敗。
$ perl -MDateTime -E'say DateTime->today(time_zone => $ARGV[0])->ymd;' \
America/New_York
2013-08-28
我需要用於測試目的的時區。我沒有試圖讓上面的代碼工作。
至少有一個時區從23:59:59跳過到1:00:00當「向前發展」的DST時。有誰知道它是什麼?沒有午夜的一天
以下通常會得到今天的日期,但對於符合上述標準的時區,一年中的某一天會失敗。
$ perl -MDateTime -E'say DateTime->today(time_zone => $ARGV[0])->ymd;' \
America/New_York
2013-08-28
我需要用於測試目的的時區。我沒有試圖讓上面的代碼工作。
有幾種。常見的一種是使用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
您可以通過獲取日期前切換到「浮動」希瑞區得到解決該問題:
$ 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
此外,還有[黎巴嫩](http://www.timeanddate.com/worldclock/clockchange.html?n=34)('亞洲/貝魯特')和[敘利亞](http://www.timeanddate.com /worldclock/clockchange.html?n=487)('Asia/Damascus') –
(這個問題可能使用'perl'和DateTime來證明我爲什麼要查找這些信息,但問題是與這兩者無關的。) – ikegami
當然。但是如果您嘗試使用無效時間,不同的實現會做不同的事情。有些會出錯,但有些會隱含起來。在perl中,你可以使用「浮動」時區來解決這個問題。 –
@Matt Johnson,我已經知道如何從DateTime得到正確的答案。 – ikegami