我正在尝试编写一个函数,将字符串日期/时间从本地时间转换为Python中的UTC。
根据这个问题,您可以使用time.tzname
来获得某些形式的本地时区,但我还没有找到在任何日期时间转换方法中使用它的方法。例如,本文展示了可以对pytz
和datetime
做一些事情来转换时间,但是它们都具有硬编码的时区,并且与time.tzname
返回的格式不同。
目前,我有以下代码将字符串格式的时间转换为毫秒(Unix epoch):
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。是否有一种方法来转换字符串格式的时间,如果它是在本地时区?谢谢。
基本上,我希望能够做这个答案所做的事情,但不是在"America/los - angeles"中硬编码,而是希望能够动态指定当地时区。
如果我理解正确的话,你想要这样:
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"))))
从时间元组中创建一个时间结构,然后使用该结构创建一个utc时间
from datetime import datetime
def local_to_utc(local_st):
time_struct = time.mktime(local_st)
utc_st = datetime.utcfromtimestamp(time_struct)
return utc_st
d=datetime(2016,6,30,3,12,40,0)
timeTuple = d.timetuple()
print(local_to_utc(timeTuple))
输出:2016-06-30 09:12:40