如何转换日期时间.从UTC到不同时区的时间



我有一个保存时间类型为datetime的变量。在UTC时间,我想把它转换成其他时区。

可以在datetime中转换时区。如何在Python中将本地时间转换为UTC时间?我不知道如何在日期时间转换时区。时间的实例。我不能使用astimezone,因为datetime。时间没有这种方法。

例如:

>>> 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

我将创建一个临时datetime对象,转换时间,并再次提取时间。

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_to_utc为链接问题中的任何建议。

使用pytz从/转换为UTC时区的简单方法:

import datetime, pytz
def time_to_utc(naive, timezone="Europe/Istanbul"):
    local = pytz.timezone(timezone)
    local_dt = local.localize(naive, is_dst=None)
    utc_dt = local_dt.astimezone(pytz.utc)
    return utc_dt
def utc_to_time(naive, timezone="Europe/Istanbul"):
    return naive.replace(tzinfo=pytz.utc).astimezone(pytz.timezone(timezone))
# type(naive) """DateTime"""
# type(timezone) """String"""

假设您需要将EST时间转换为UTC时间。首先,python datetime对象默认情况下不支持时区。它们占用系统时间。如果你创建了一个datetime对象

from datetime import datetime
date = datetime(2022, 4, 28, 18, 0, 0) # or date = datetime.now() or strftime(), there are so many ways

date将不支持时区。我们可以使用pytz使datetimes具有时区意识,然后使用localize在时区之间进行转换。

import pytz
from datetime import datetime
est = pytz.timezone('Europe/Paris')
utc = pytz.utc

我们首先让datetime可以识别时区。

est_time = est.localize(date)

然后我们可以更改时区并获得我们希望的相关时间。

utc_time = est_time.astimezone(utc)

时区字符串的完整列表可在:

pytz.all_timezones

相关内容

  • 没有找到相关文章