[英]Localize datetime (timezone aware) from timezone offset
我有一個UTC時間戳和一個時區偏移時間戳(均以毫秒為單位):
utc_time = 1394452800000
timezoneoffset = -14400000
如果我想獲取datetime
我會做:
print datetime.utcfromtimestamp(utc_time/1000)
>>>2014-03-10 12:00:00
如何本地化此日期時間,但最終對象也可以識別時區?
如果我將timezoneoffset
除以-14400000 /(3600 * 1000)= -4(小時)。 因此,最終輸出應為:
>>>2014-03-10 08:00:00-04:00
我的嘗試:
from pytz import timezone
from dateutil.tz import tzoffset
utc_time = 1394452800000
timezoneoffset = -14400000
tzinfooff = tzoffset(None, timezoneoffset/1000)
print timezone(tzinfooff).localize( datetime.utcfromtimestamp(utc_time/1000) )
>>>Traceback (most recent call last):
File "/Users/dionysis_lorentzos/Desktop/cmdline copy.py", line 25, in <module>
print timezone(tzinfo2).localize( datetime.utcfromtimestamp(time/1000) ).isoformat()
File "/usr/local/lib/python2.7/site-packages/pytz/__init__.py", line 162, in timezone
if zone.upper() == 'UTC':
AttributeError: 'tzoffset' object has no attribute 'upper'
您需要使用只是 dateutil.tz.tzoffset()
型 ; pytz.timezone
僅接受名稱 ,而不dateutil.tz
對象。
僅在pytz
提供的時區中才需要.localize()
方法,因為它們也包含歷史偏移量,並且需要將它們應用於datetime
對象,這要比.replace()
稍加注意。
如果時間戳記是UTC中的UNIX紀元值,則將fromtimestap
和時區用作第二個參數:
>>> print datetime.fromtimestamp(utc_time/1000, tzinfooff)
2014-03-10 08:00:00-04:00
或者,您可以使用datetime.astimezone()
從UTC進行翻譯 :
>>> from dateutil.tz impor tzutc
>>> dt_utc = datetime.utcfromtimestamp(utc_time/1000).replace(tzinfo=tzutc())
>>> print dt_utc.astimezone(tzinfooff)
2014-03-10 08:00:00-04:00
要將POSIX時間戳轉換為由utc偏移指定的時區中的時區識別日期時間對象,可以創建一個感知的utc日期時間對象並將其轉換為固定偏移時區:
from datetime import datetime
utc_dt = datetime.fromtimestamp(utc_time * 1e-3, utc)
dt = utc_dt.astimezone(FixedOffset(timezoneoffset * 1e-3 / 60, None))
print(dt.isoformat(' '))
# -> 2014-03-10 08:00:00-04:00
其中utc
和FixedOffset
在datetime
docs中定義:
from datetime import tzinfo, timedelta
class FixedOffset(tzinfo):
"""Fixed offset in minutes east from UTC."""
def __init__(self, offset, name):
self.__offset = timedelta(minutes = offset)
self.__name = name
def utcoffset(self, dt):
return self.__offset
def tzname(self, dt):
return self.__name
def dst(self, dt):
return timedelta(0)
utc = FixedOffset(0, "UTC")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.