python的日期时间机制

时间:2013-06-23 18:46:20

标签: python datetime

我误解了python的datetime是如何工作的。最近我看到两行代码:

datetime.datetime.utcnow()
datetime.datetime.utcnow().replace(tzinfo=pytz.utc)

而我实际上无法理解它们之间有什么区别?在哪些情况下,这两个对象的行为方式不同?我将很感激澄清这个问题。

2 个答案:

答案 0 :(得分:4)

第一个创建一个没有时区的天真datetime对象,第二个附加一个时区对象,使该对象可以识别时区。

两个对象都会根据UTC提供日期和时间。

引用datetime module documentation

  

知觉对象充分了解适用的算法和政治时间调整,例如时区和夏令时信息,以便相对于其他知晓对象定位自己。知觉对象用于表示不对解释[1]开放的特定时刻。

     

一个天真的对象没有足够的信息来明确地相对于其他日期/时间对象定位自己。天真物体是代表协调世界时(UTC),当地时间还是其他某个时区的时间完全取决于程序,就像程序一样,特定数字是代表米,英里还是质量。天真的物体易于理解和使用,代价是忽略了现实的某些方面。

天真和有意识的对象无法比较,也无法在天真和有意识的日期时间对象之间执行日期时算术。

datetime.datetime个对象上的许多操作在两种类型之间有所不同;我建议你在文档中搜索“天真”。如果操作不同,则由于存在额外的时区信息;例如,.utctimetuple()将返回与.timetuple()相同的值,但是对于天真对象强制关闭DST,但对于知道对象,返回的元组表示UTC时间,无论附加到对象的时区是什么。

答案 1 :(得分:1)

这用于将时区分配给datetime对象。如果您未设置tzinfo,则无法使用datetime.astimezone

设置时区

另请参阅:datetime.datetime.utcnow() why no tzinfo?