如何在Python中将当地时间的日期/时间字符串转换为UTC?

时间:2016-06-29 23:56:24

标签: python datetime timezone utc

我正在尝试编写一个函数,它将Python中的字符串日期/时间从本地时间转换为UTC。

根据this question,您可以使用time.tzname来获取某些形式的本地时区,但我还没有找到在任何日期时间转换方法中使用此方法的方法。例如,this article显示您可以使用pytzdatetime来转换时间,但所有这些都有时区,这些时区是硬编码的,格式不同于time.tzname返回的内容。

目前我有以下代码将字符串格式的时间转换为毫秒(Unix纪元):

local_time = time.strptime(datetime_str, "%m/%d/%Y %H:%M:%S") # expects UTC, but I want this to be local
dt = datetime.datetime(*local_time[:6])
ms = int((dt - datetime.datetime.utcfromtimestamp(0)).total_seconds() * 1000)

但是,这需要时间作为UTC输入。有没有办法将字符串格式化的时间转换为在本地时区?感谢。

基本上,我希望能够执行this answer所做的事情,但我希望能够动态指定本地时区,而不是“America / Los_Angeles”中的硬编码。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题你想要这个:

from time import strftime,gmtime,mktime,strptime

# you can pass any time you want
strftime("%Y-%m-%d %H:%M:%S", gmtime(mktime(strptime("Thu, 30 Jun 2016 03:12:40", "%a, %d %b %Y %H:%M:%S"))))

# and here for real time
strftime("%Y-%m-%d %H:%M:%S", gmtime(mktime(strptime(strftime("%a, %d %b %Y %H:%M:%S"), "%a, %d %b %Y %H:%M:%S"))))