您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Python中将时区感知日期时间转换为本地时间

在Python中将时区感知日期时间转换为本地时间

通常,要将任意时区感知日期时间转换为原始(本地)日期时间,我将使用pytz模块并将astimezone其转换为本地时间,replace并使日期时间变为原始状态:

In [76]: import pytz

In [77]: est=pytz.timezone('US/Eastern')

In [78]: d.astimezone(est)
Out[78]: datetime.datetime(2010, 10, 30, 13, 21, 12, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)

In [79]: d.astimezone(est).replace(tzinfo=None)
Out[79]: datetime.datetime(2010, 10, 30, 13, 21, 12)

但是由于你的特定日期时间似乎在UTC时区,因此你可以这样做:

In [65]: d
Out[65]: datetime.datetime(2010, 10, 30, 17, 21, 12, tzinfo=tzutc())

In [66]: import datetime

In [67]: import calendar

In [68]: datetime.datetime.fromtimestamp(calendar.timegm(d.timetuple()))
Out[68]: datetime.datetime(2010, 10, 30, 13, 21, 12)

顺便说一句,你最好将日期时间存储为朴素的UTC日期时间而不是朴素的本地日期时间。这样,你的数据是本地时间不可知的,并且仅在必要时才转换为本地时间或任何其他时区。有点类似于尽可能地使用unicode,并且仅在必要时进行编码。

因此,如果你同意将日期时间存储在幼稚的UTC中是最好的方法,那么你只需定义:

local_d = d.replace(tzinfo=None)
python 2022/1/1 18:21:43 有521人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶