Python/pytz在本地时区与UTC之间转换的问题

7 投票
1 回答
1688 浏览
提问于 2025-04-17 02:33

我需要把一个本地时间戳转换成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 个回答

6

date = date.replace(tzinfo=users_timezone)

改为

date = users_timezone.localize(date)

localize 会自动调整夏令时,而 replace 则不会。想了解更多信息,可以查看 文档

撰写回答