将datetime.min转换为偏移量知道的日期时间

时间:2019-05-24 07:05:08

标签: python timezone

我需要用datetime.min减去可识别时区的datetime.now(),但我一直收到此错误 TypeError:无法减去未设置偏移时间和可识别偏移的日期时间。请帮忙!

from datetime import datetime
from pytz import timezone
now = datetime.now(timezone('Europe/Dublin'))
result = now - datetime.min

2 个答案:

答案 0 :(得分:3)

您可以将其转换为UTC

In [1]: from datetime import datetime

In [2]: import pytz

In [3]: dt_min = datetime.min

In [4]: print(dt_min)
0001-01-01 00:00:00

In [5]: dt_min = dt_min.replace(tzinfo=pytz.UTC)

In [6]: print(dt_min)
0001-01-01 00:00:00+00:00

因此您的代码应为:

from datetime import datetime
import pytz
now = datetime.now(pytz.timezone('Europe/Dublin'))
dt_min = datetime.min
result = now - dt_min.replace(tzinfo=pytz.UTC)
print(result)

output:
737202 days, 7:27:48.839353

答案 1 :(得分:1)

datetime.min没有附加时区信息,因此是“天真偏移”。 now附加了时区信息(“都柏林”),因此具有“偏移感知”。

datetime对象进行时间操作需要它们保持一致。考虑一下如何从“ 22:00:00 SAST”中减去没有TZ的“ 13:22:45”? “ 13:22:45”也是GMT + 2吗?你不知道。

因此将其中之一转换为所需的时区。将datetime.min转换为您的时区会出现OverflowError,所以换一种方式。

tz = timezone('Europe/Dublin')
now_utc = pytz.UTC.normalize(now)
now_naive = now_utc.replace(tzinfo=None)
result_timedelta = now_naive - datetime.min