如何将本地时间的datetime 字符串转换为UTC时间的字符串?
我确定我之前已经做过,但是找不到它,因此SO希望将来可以帮助我(和其他人)做到这一点。
澄清:例如,如果我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时间。
从字符串到字符串的完整转换如下:
time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.mktime(time.strptime("2008-09-17 14:04:00", "%Y-%m-%d %H:%M:%S"))))
我对time/ calendar函数的总结:
time/ calendar
time.strptime 字符串->元组(未应用时区,因此匹配字符串)
time.strptime
time.mktime 当地时间元组->自纪元以来的秒数(总是当地时间)
time.mktime
time.gmtime 自纪元以来的秒数-> UTC中的元组
time.gmtime
和
calendar.timegm 以UTC表示的元组->自历元以来的秒数
calendar.timegm
time.localtime 自纪元以来的秒数->当地时区中的元组
time.localtime
首先,将字符串解析为一个简单的datetime对象。这是的实例,datetime.datetime没有附加的时区信息。请参阅文档以datetime.strptime获取有关解析日期字符串的信息。
datetime.datetime
datetime.strptime
使用pytz带有时区+ UTC完整列表的模块。弄清楚本地时区是什么,从中构造一个时区对象,然后将其操纵并附加到原始日期时间。
最后,使用datetime.astimezone()方法将日期时间转换为UTC。
datetime.astimezone()
使用本地时区“ America / Los_Angeles”的字符串“ 2001-2-3 10:11:12”的源代码:
import pytz, datetime local = pytz.timezone ("America/Los_Angeles") naive = datetime.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")