首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从时区偏移量本地化日期时间(时区感知)

从时区偏移量本地化日期时间(时区感知)
EN

Stack Overflow用户
提问于 2014-03-10 15:52:08
回答 1查看 7.5K关注 0票数 0

我有一个UTC时间戳和一个时区偏移时间戳(都以毫秒为单位):

代码语言:javascript
运行
复制
utc_time = 1394452800000
timezoneoffset = -14400000

如果我想得到datetime,我会这么做的:

代码语言:javascript
运行
复制
print datetime.utcfromtimestamp(utc_time/1000)
>>>2014-03-10 12:00:00

,我如何定位这个日期时间,但最后一个对象也是时区感知的呢?

如果除以timezoneoffset,则-14400000/(3600*1000) = -4 (小时)。因此,最终的输出应该是:

代码语言:javascript
运行
复制
>>>2014-03-10 08:00:00-04:00

我的尝试:

代码语言:javascript
运行
复制
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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-10 16:00:21

您只需要使用 typepytz.timezone只使用名称,而不是dateutil.tz对象。

.localize()方法仅适用于pytz-supplied时区,因为它们也包含历史偏移,并且需要使用比.replace()更谨慎的方法应用于datetime对象。

如果时间戳是UTC中的UNIX时代值,则使用带有时区的fromtimestap作为第二个参数:

代码语言:javascript
运行
复制
>>> print datetime.fromtimestamp(utc_time/1000, tzinfooff)
2014-03-10 08:00:00-04:00

或者您可以使用datetime.astimezone()从UTC进行翻译。

代码语言:javascript
运行
复制
>>> 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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22304951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档