我目前正在尝试从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
答案 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)