如何将日期时间本地时间字符串转换为UTC时间字符串?
我确定我以前做过这个,但找不到它,所以希望将来能帮助我(和其他人)做到这一点。
澄清:例如,如果我的本地时区有 2008-09-17 14:02:00
(+10
) ,我想生成一个具有等效 UTC
时间的字符串:2008-09-17 04:02:00
。
另外,来自 http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/ ,请注意,通常这是不可能的,因为 DST 和其他问题没有从本地时间到 UTC 时间的唯一转换。
最佳答案
首先,将字符串解析为一个简单的日期时间对象。这是 datetime.datetime
的一个实例,没有附加时区信息。见其documentation .
使用 pytz
模块,它带有完整的时区列表 + UTC。弄清楚本地时区是什么,从中构造一个时区对象,然后对其进行操作并将其附加到原始日期时间。
最后,使用datetime.astimezone()
方法将日期时间转换为UTC。
源代码,使用本地时区“America/Los_Angeles”,字符串“2001-2-3 10:11:12”:
from datetime import datetime
import pytz
local = pytz.timezone("America/Los_Angeles")
naive = datetime.strptime("2001-2-3 10:11:12", "%Y-%m-%d %H:%M:%S")
local_dt = local.localize(naive, is_dst=None)
utc_dt = local_dt.astimezone(pytz.utc)
从那里,您可以根据需要使用 strftime()
方法来格式化 UTC 日期时间:
utc_dt.strftime("%Y-%m-%d %H:%M:%S")
https://stackoverflow.com/questions/79797/