我误解了python的datetime
是如何工作的。最近我看到两行代码:
datetime.datetime.utcnow()
datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
而我实际上无法理解它们之间有什么区别?在哪些情况下,这两个对象的行为方式不同?我将很感激澄清这个问题。
答案 0 :(得分:4)
第一个创建一个没有时区的天真datetime
对象,第二个附加一个时区对象,使该对象可以识别时区。
两个对象都会根据UTC提供日期和时间。
引用datetime
module documentation:
知觉对象充分了解适用的算法和政治时间调整,例如时区和夏令时信息,以便相对于其他知晓对象定位自己。知觉对象用于表示不对解释[1]开放的特定时刻。
一个天真的对象没有足够的信息来明确地相对于其他日期/时间对象定位自己。天真物体是代表协调世界时(UTC),当地时间还是其他某个时区的时间完全取决于程序,就像程序一样,特定数字是代表米,英里还是质量。天真的物体易于理解和使用,代价是忽略了现实的某些方面。
天真和有意识的对象无法比较,也无法在天真和有意识的日期时间对象之间执行日期时算术。
datetime.datetime
个对象上的许多操作在两种类型之间有所不同;我建议你在文档中搜索“天真”。如果操作不同,则由于存在额外的时区信息;例如,.utctimetuple()
将返回与.timetuple()
相同的值,但是对于天真对象强制关闭DST,但对于知道对象,返回的元组表示UTC时间,无论附加到对象的时区是什么。
答案 1 :(得分:1)
这用于将时区分配给datetime对象。如果您未设置tzinfo,则无法使用datetime.astimezone