gpt4 book ai didi

python - 如何将 datetime.time 从 UTC 转换为不同的时区?

转载 作者:太空狗 更新时间:2023-10-29 20:29:25 28 4
gpt4 key购买 nike

我有一个保存时间的变量,它是 UTC 中的 datetime.time 类型,我希望它转换为其他时区。

我们可以在 datetime.datetime 实例中转换时区,如此 SO 链接 - How do I convert local time to UTC in Python? 所示.我无法弄清楚如何在 datetime.time 实例中转换时区。我不能使用 astimezone 因为 datetime.time 没有这个方法。

例如:

>>> t = d.datetime.now().time()
>>> t
datetime.time(12, 56, 44, 398402)
>>>

我需要 UTC 格式的“t”。

最佳答案

有四种情况:

  1. 输入 datetime.time 设置了 tzinfo(例如 OP 提到 UTC)
    1. 输出为非天真的时间
    2. 输出为原始时间(tzinfo 未设置)
  2. 输入 datetime.time 没有设置 tzinfo
    1. 输出为非天真的时间
    2. 输出为原始时间(tzinfo 未设置)

正确答案需要使用 datetime.datetime.timetz() 函数,因为 datetime.time 不能通过调用 构建为非原始时间戳>localize()astimezone() 直接。

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_to_tz_naive(t, pytz.utc, pytz.timezone('Europe/Berlin'))

datetime.time(14, 56, 44, 398402)

time() 实例已经设置了 tzinfo 的情况更容易,因为 datetime.combine 从传递的参数中获取 tzinfo ,所以我们只需要转换为 tz_out

关于python - 如何将 datetime.time 从 UTC 转换为不同的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16603645/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com