2013-08-28 113 views
8

至少有一個時區從23:59:59跳過1:00:00當「向前發展」的DST時。有誰知道它是什麼?沒有午夜的一天

以下通常會得到今天的日期,但對於符合上述標準的時區,一年中的某一天會失敗。

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

我需要用於測試目的的時區。我沒有試圖讓上面的代碼工作。

+0

(這個問題可能使用'perl'和DateTime來證明我爲什麼要查找這些信息,但問題是與這兩者無關的。) – ikegami

+1

當然。但是如果您嘗試使用無效時間,不同的實現會做不同的事情。有些會出錯,但有些會隱含起來。在perl中,你可以使用「浮動」時區來解決這個問題。 –

+0

@Matt Johnson,我已經知道如何從DateTime得到正確的答案。 – ikegami

回答

4

有幾種。常見的一種是使用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 

this documentation

+1

此外,還有[黎巴嫩](http://www.timeanddate.com/worldclock/clockchange.html?n=34)('亞洲/貝魯特')和[敘利亞](http://www.timeanddate.com /worldclock/clockchange.html?n=487)('Asia/Damascus') –