如何将日期时间(如20210625 15:00:08+00:00)转换为本地时区datetime.datetime python?

2024-06-28 19:32:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有许多datetime.datetime对象,如2021-06-25 15:00:08+00:00,其中时区对于不同的数据是不同的。例如,另一个数据是2021-06-24 06:33:06-07:00。我想通过转换为本地tmezone来保存所有数据。我该如何做


Tags: 数据对象datetimetmezone
2条回答

^{}方法将返回一个datetime对象,该对象具有相同的UTC时间,但位于本地时区。对于您的示例时间:

>>> dt_1 = datettime.fromisoformat(2021-06-25 15:00:08+00:00)
>>> dt_1.astimezone()
datetime.datetime(2021, 6, 25, 11, 0, 8, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000), 'EDT'))

>>> dt_2 = datetime.fromisoformat(2021-06-24 06:33:06-07:00)
>>> dt_2.astimezone()
datetime.datetime(2021, 6, 24, 9, 33, 6, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000), 'EDT'))

由于带有tzinfodatetime.datetime对象是时区感知的,因此不管如何,信息都将存储在对象中。这只是一种获取当地时间的简便方法

更新,基于以下后续问题:

astimezone()不依赖于datetime对象的创建方式。对于不同格式的日期/时间字符串,^{}可用于创建时区感知的datetime对象。根据后续问题中给出的示例:

>>> dt_3 = datetime.strptime('Sat, 26 Jun 2021 15:00:09 +0000 (UTC)',
                             '%a, %d %b %Y %H:%M:%S %z (%Z)')
>>> dt_3.astimezone()
datetime.datetime(2021, 6, 26, 11, 0, 9, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000), 'EDT'))

您可以使用pytz

from datetime import datetime
import pytz

dt_input = datetime.fromisoformat('2021-06-24 06:33:06-07:00')
print(dt_input) # prints datetime in input timezone

local_tz = pytz.timezone('Asia/Kolkata') #provide your timezone here
dt_local = dt_input.astimezone(local_tz)

print(dt_local) #prints in your local timezone as provided above

您可以参考与您的问题类似的SO问题:

How to convert a UTC datetime to a local datetime using only standard library?

编辑:将任何字符串转换为datetime对象:

您可以使用strtime('datestring','dateformat')

您评论中的示例:

#This will convert the string to datetime object    
datetime.strptime('Sat, 26 Jun 2021 15:00:09 +0000 (UTC)','%a, %d %b %Y %H:%M:%S %z (%Z)')

一旦转换为datetime对象,您就可以将其转换为上面提到的本地时区

相关问题 更多 >