解決Cannot compare tz-naive and tz-aware timestamps

offset-naive是不含時區的時間類型,而offset-aware是有時區時間類型

>>> a = pd.to_datetime('2099-09-30 16:00:00')
>>> b = a.tz_localize('Asia/Shanghai')
>>> print('type:', type(a), type(b))
type: <class 'pandas._libs.tslibs.timestamps.Timestamp'> <class 'pandas._libs.tslibs.timestamps.Timestamp'>
>>> print('tzinfo:', a.tzinfo, b.tzinfo)
tzinfo: None Asia/Shanghai

>>> print("offset-naive轉offset-aware:", a.tz_localize('Asia/Shanghai'), a.tz_localize('Asia/Shanghai').tzinfo)
offset-naive轉offset-aware: 2099-09-30 16:00:00+08:00 Asia/Shanghai
>>>
>>> print("offset-aware轉offset-naive:",b.replace(tzinfo=None), b.replace(tzinfo=None).tzinfo)
offset-aware轉offset-naive: 2099-09-30 16:00:00 None

>>> print("時區轉化:",b.tz_convert('Asia/Tokyo'))
時區轉化: 2099-09-30 17:00:00+09:00

疑問:
在兩個環境下pd.to_datetime(‘2099-09-30T16:00:00+8:00’)返回的可能是offset-naive也可能是offset-aware
windows python 3.6.5:

>>> print( pd.to_datetime('2099-09-30T16:00:00+8:00').tzinfo)
None

linux python 3.6.6

>>> print( pd.to_datetime('2099-09-30T16:00:00+8:00').tzinfo)
pytz.FixedOffset(480)

猜測有系統環境變量影響到了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章