2015-10-13 16 views
0

我有這樣的日期字符:'2015-03-02T10:00:00Z'。在我的本地機器上,dateutil.parser.parse()產生UTC時區的datetime對象,如我所料。但在另一個環境中(當我部署到iron.io時),它會解析相同的字符串,並將生成的日期時間爲tzlocal()作爲其tzinfodateutil.parser處理結束於Z的日期字符串

是否有一個已知的理由應該發生?爲什麼環境會影響如何解析Z

(這兩個環境應該是Python 2.7版)

+0

供參考:[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)[RFC 3339](https://tools.ietf.org/html/rfc3339)描述這個*非常*通用的標準化格式。 'Z'明確* UTC,所以如果一個環境沒有兌現,那麼在你的代碼或他們的代碼中有一個bug。 –

+0

提供導致'tzlocal()'的輸入時間字符串。 ''2015-03-02T10:00:00Z''是UTC時間:[沒有解釋的餘地​​](https://tools.ietf.org/html/rfc3339#section-5.6) – jfs

回答

1

我看到這個問題是舊的,但我只是有一個類似的問題。在我的情況下,我發現,出於某種原因,如果當前時區是UTC,當我解析一個字符串如「2017-02-23T06:54:00Z」時,生成的日期時間爲tzinfo=tzlocal();而對於其他時區,結果日期時間有預期的tzinfo=tzutc()

In [1]: import time, os 

In [2]: from dateutil import parser 

In [3]: time.tzname, time.timezone 
Out[3]: (('EST', 'EDT'), 18000) 

In [4]: parser.parse("2017-02-23T06:54:00Z") 
Out[4]: datetime.datetime(2017, 2, 23, 6, 54, tzinfo=tzutc()) 

In [5]: os.environ['TZ'] = 'UTC' 

In [6]: time.tzset() 

In [7]: time.tzname, time.timezone 
Out[7]: (('UTC', 'UTC'), 0) 

In [8]: parser.parse("2017-02-23T06:54:00Z") 
Out[8]: datetime.datetime(2017, 2, 23, 6, 54, tzinfo=tzlocal()) 
+1

我開了一個問題這個:https://github.com/dateutil/dateutil/issues/349 –