Python 如何将datetime.time从UTC转换为不同的时区?
我有一个变量,它保存的时间是UTC中的datetime.time类型,我希望它转换成其他时区 我们可以在datetime.datetime实例中转换时区,如本SO链接-。我不知道如何在datetime.time实例中转换时区。我无法使用astimezone,因为datetime.time没有此方法 例如:Python 如何将datetime.time从UTC转换为不同的时区?,python,datetime,timezone,Python,Datetime,Timezone,我有一个变量,它保存的时间是UTC中的datetime.time类型,我希望它转换成其他时区 我们可以在datetime.datetime实例中转换时区,如本SO链接-。我不知道如何在datetime.time实例中转换时区。我无法使用astimezone,因为datetime.time没有此方法 例如: >>> t = d.datetime.now().time() >>> t datetime.time(12, 56, 44, 398402) >&g
>>> t = d.datetime.now().time()
>>> t
datetime.time(12, 56, 44, 398402)
>>>
我需要UTC格式的“t” 我将创建一个temp datetime对象,转换tz,然后再次提取时间
import datetime
def time_to_utc(t):
dt = datetime.datetime.combine(datetime.date.today(), t)
utc_dt = datetime_to_utc(dt)
return utc_dt.time()
t = datetime.datetime.now().time()
utc_t = time_to_utc(t)
其中,
datetime\u to_utc
是中的任何建议。使用以下方法从utc时区转换为utc时区的简便方法:
有四种情况:
datetime.time
设置了tzinfo
时间(例如OP提到UTC)
tzinfo
未设置)datetime.time
具有tzinfo
未设置
tzinfo
未设置)datetime.datetime.timetz()
函数,因为通过直接调用localize()
或astimezone()
无法将datetime.time
构建为非原始时间戳
from datetime import datetime, time
import pytz
def timetz_to_tz(t, tz_out):
return datetime.combine(datetime.today(), t).astimezone(tz_out).timetz()
def timetz_to_tz_naive(t, tz_out):
return datetime.combine(datetime.today(), t).astimezone(tz_out).time()
def time_to_tz(t, tz_out):
return tz_out.localize(datetime.combine(datetime.today(), t)).timetz()
def time_to_tz_naive(t, tz_in, tz_out):
return tz_in.localize(datetime.combine(datetime.today(), t)).astimezone(tz_out).time()
基于OP要求的示例:
t = time(12, 56, 44, 398402)
time_to_tz(t, pytz.utc) # assigning tzinfo= directly would not work correctly with other timezones
datetime.time(12, 56, 44, 398402, tzinfo=<UTC>)
time()实例已经设置了
tzinfo
的情况更容易,因为datetime.combine
从传递的参数中拾取tzinfo
,所以我们只需要转换为tzinfo-out
好,是否不可能使用datetime.time实例转换时区。谷歌搜索它什么也没找到。你的方法很好,但花的时间太多了。还有更好的办法吗?谢谢。您可能需要解释您的代码,并且naive应该是本地的,就像您的本地时区一样???其中,naive
是一个没有时区的datetime
对象,timezone
是一个与pytz.timezone
名称之一匹配的字符串。简要说明naive与awaredatetime
对象。
t = time(12, 56, 44, 398402)
time_to_tz(t, pytz.utc) # assigning tzinfo= directly would not work correctly with other timezones
datetime.time(12, 56, 44, 398402, tzinfo=<UTC>)
time_to_tz_naive(t, pytz.utc, pytz.timezone('Europe/Berlin'))
datetime.time(14, 56, 44, 398402)