python / pytz问题从本地时区转换为UTC然后返回

Posted

技术标签:

【中文标题】python / pytz问题从本地时区转换为UTC然后返回【英文标题】:Issue with python/pytz Converting from local timezone to UTC then back 【发布时间】:2011-11-19 21:07:11 【问题描述】:

我需要将日期从本地时间戳转换为 UTC,然后再转换回本地时间戳。

奇怪的是,当从 UTC 转换回本地时,python 决定它是 PDT 而不是原始 PST,因此转换后的日期增加了一个小时。有人可以向我解释发生了什么或我做错了什么吗?

from datetime import datetime
from pytz import timezone
import pytz

DATE_FORMAT = '%Y-%m-%d %H:%M:%S %Z%z'

def print_formatted(dt):
    formatted_date = dt.strftime(DATE_FORMAT)
    print "%s :: %s" % (dt.tzinfo, formatted_date)


#convert the strings to date/time
date = datetime.now()
print_formatted(date)

#get the user's timezone from the pofile table
users_timezone = timezone("US/Pacific")

#set the parsed date's timezone
date = date.replace(tzinfo=users_timezone)
date = date.astimezone(users_timezone)
print_formatted(date)

#Create a UTC timezone
utc_timezone = timezone('UTC')
date = date.astimezone(utc_timezone)
print_formatted(date)

#Convert it back to the user's local timezone
date = date.astimezone(users_timezone)
print_formatted(date)

这是输出:

None :: 2011-09-18 18:24:23 
US/Pacific :: 2011-09-18 18:24:23 PST-0800
UTC :: 2011-09-19 02:24:23 UTC+0000
US/Pacific :: 2011-09-18 19:24:23 PDT-0700

【问题讨论】:

【参考方案1】:

改变

date = date.replace(tzinfo=users_timezone)

date = users_timezone.localize(date)

localize 会根据夏令时进行调整,replace 不会。请参阅the docs 了解更多信息。

【讨论】:

以上是关于python / pytz问题从本地时区转换为UTC然后返回的主要内容,如果未能解决你的问题,请参考以下文章

python不正确的时区转换使用pytz

Python pytz 时区转换返回的值与不同日期的时区偏移量不同

在 Python 中使用 pytz 本地化纪元时间

使用 pytz 将日期时间从一个时区转换为另一个时区

Pytz Python时区转换不起作用

python 使用`pytz`将时间和日期对话转换为其他时区。