日期时间打印时间无偏移

时间:2019-03-06 16:57:41

标签: python django datetime

我目前正在尝试从UTC转换时间,而我遇到的问题是偏移量似乎是向后的。如您所见,当我将UTC转换为EST时,它显示的偏移量为-4:56,但是当我打印时间时,它似乎增加了4:56而不是应该的方式。我真的很想能够将UTC时间转换为任何其他时区,并使其显示那里的当地时间而没有偏移,因此此处的UTC将按照2019-03-06 9:12 EST的时间转换为某种时间。

>>> example.created
datetime.datetime(2019, 3, 6, 14, 8, 49, 841881, tzinfo=<UTC>)
>>> original_utc = example.created
>>> original_utc
datetime.datetime(2019, 3, 6, 14, 8, 49, 841881, tzinfo=<UTC>)
>>> conv_est = original_utc.replace(tzinfo=pytz.timezone('US/Eastern'))
>>> conv_est
datetime.datetime(2019, 3, 6, 14, 8, 49, 841881, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>)
>>> print(conv_est)
2019-03-06 14:08:49.841881-04:56
>>> print(conv_est.astimezone())
2019-03-06 19:04:49.841881+00:00

1 个答案:

答案 0 :(得分:1)

我怀疑您误解了方法.astimezone()

您的原始日期时间是UTC时间

>>> example.created
datetime.datetime(2019, 3, 6, 14, 8, 49, 841881, tzinfo=<UTC>)

然后,您更改了变量conv_est的时区信息,实际上它按设计工作:

>>> conv_est = original_utc.replace(tzinfo=pytz.timezone('US/Eastern'))
>>> conv_est
datetime.datetime(2019, 3, 6, 14, 8, 49, 841881, tzinfo=<DstTzInfo 'US/Eastern' LMT-1 day, 19:04:00 STD>)

如果打印此变量,它将显示正确的信息

>>> print(conv_est)
2019-03-06 14:08:49.841881-04:56

但是当您不带任何参数调用.astimezone()时,返回值就是datetime区域中的UTC对象;这意味着该方法也可以按设计工作,返回相同的时间点,但在UTC中表示为本地时间(在UTC中为7 PM/19hs,而在美国/东部地区为2 PM/14hs。)

>>> print(conv_est.astimezone())
2019-03-06 19:04:49.841881+00:00

您可以通过计算差异(将为0)来测试自己:

>>> conv_est == conv_est.astimezone()
True
>>> conv_est - conv_est.astimezone()
datetime.timedelta(0)