Python时区感知日期时间和UTC转换

时间:2016-04-07 15:26:08

标签: python datetime

鉴于以下示例:

import datetime
import pprint
import time

now_unaware = datetime.datetime.now()
print "Time gotten from the OS: " 
pprint.pprint now_unaware                   
     #OUTPUT: datetime.datetime(2016, 4, 7, 17, 4, 54, 689054)
     #COMMENT: The time is correct for the zone, but now_unaware doesn't explicitly know what zone is this. 
print "My timezone:"
pprint.pprint(time.tzname[time.daylight])   
     ##OUTPUT: 'CEST'

请确认或反驳我的假设。

假设

鉴于上述信息,我应该有足够的信息:

  • now_unaware在没有任何时区硬编码的情况下了解时区,因为' CEST'明确定义与UTC的关系
  • 能够将now_unaware转换为UTC,而无需导入任何其他库
  • 根据上述信息无法做到这一点,无论是python设计缺陷还是处理问题的错误思维方式

1 个答案:

答案 0 :(得分:1)

你的第一个假设是正确的。听起来你想本地化你不知道的时间对象。

你的第二个假设是有道理的。在Python 3中,由于datetime.timezone,使用标准库的时区更容易。

但是在Python 2中,只有标准库才能轻松完成。您需要继承tzinfo。查看tzinfo链接中的“示例tzinfo类”。

最后,你对解决问题有了正确的心态。仅使用标准库这样做确实很好。我认为Python 3解决了这个问题,这就是为什么Python 2用户倾向于将pytz包添加到他们的项目中。

如果您有兴趣,可以对它进行冗长的讨论here