📜  请注意,在 UTC 时间使用 astimezone() 时存在错误.这给出了不正确的结果: - Python (1)

📅  最后修改于: 2023-12-03 15:41:47.173000             🧑  作者: Mango

请注意,在 UTC 时间使用 astimezone() 时存在错误。这给出了不正确的结果: - Python

在Python中,astimezone()方法是用于将datetime对象从一种时区转换为另一种时区的方法。但是,在将UTC时间转换为其他时区时,使用astimezone()存在错误。

由于UTC时间没有夏令时,而其他时区可能有夏令时,因此在使用astimezone()方法时,可能会产生错误的时间。

例如,假设我们将一个UTC时间对象转换为美国东部时间:

from datetime import datetime, timezone

utc_time = datetime(2021, 1, 1, 12, 0, 0, tzinfo=timezone.utc)
eastern_time = utc_time.astimezone(timezone('US/Eastern'))
print(eastern_time)

输出结果为:

2021-01-01 07:00:00-05:00

但是,实际上,美国东部在2021年1月1日使用了夏令时,因此正确的结果应该为:

2021-01-01 08:00:00-05:00

因此,在使用astimezone()时,应该先确定目标时区是否使用了夏令时,如果使用了,应该使用pytz库中的正确时区对象进行转换,而不是使用默认的时区对象。

例如,正确的转换方式为:

import pytz

utc_time = datetime(2021, 1, 1, 12, 0, 0, tzinfo=timezone.utc)
eastern_tz = pytz.timezone('US/Eastern')
eastern_time = eastern_tz.normalize(utc_time.astimezone(eastern_tz))
print(eastern_time)

输出结果为:

2021-01-01 08:00:00-05:00

因此,需要注意,在UTC时间使用astimezone()时存在错误,要正确地转换时区,应该先了解目标时区是否使用了夏令时,如果使用了,应该使用正确的时区对象进行转换。