我可以完全停止使用datetime.date吗?

时间:2014-01-10 00:42:37

标签: python date datetime

在Python中,我的印象是datetime.date基本上只是datetime.datetime的一个子集,具有更少的功能和更少的开销。我想永远不要再使用datetime.date,理由如下:

  • 这两种类型之间不再有转换!

  • 由于显而易见的原因,
  • datetime.date对象始终是时区不知道的。如果您有时使用datetime.date并且有时使用datetime.datetime

  • ,则会在整个应用程序中概括时区处理变得更加困难
  • 我多次遇到头痛,不小心比较datetime.date个对象和datetime.datetime个对象。始终只使用一种类型可以使比较更简单。

  • 格式化datetime.datedatetime.datetime之间的差异应仅是格式化问题。将差异进一步深入到基础类中会给语言带来不必要的复杂性。

  • 如果我在正确的轨道上,那么datetime.date最终将在未来的Python版本中弃用,就像unicodelong一样。现在采用这个惯例使我领先于曲线。

在我看来,继续使用datetime.date的唯一令人信服的理由是datetime.datetime中涉及的额外内存和存储量很少。让我们说我不关心这个额外的开销。有没有其他非常令人信服的理由继续使用这门课程?我不想切换到这个惯例,然后后悔,因为我错过了一些重要的事情。

2 个答案:

答案 0 :(得分:12)

它们代表不同的东西。

datetime是特定时间点。

date及时区间。那天不是00:00:00,而是整天

这就是为什么你不能直接在它们之间进行转换的原因。这就是为什么你不能用datetime代替date

(同一timedelta类型用于两者的事实可能是该模块中的一个缺陷,已经讨论了几次,但我怀疑它将永远被纠正。)

答案 1 :(得分:9)

这是确切的关系:

>>> import datetime
>>> issubclass(datetime.datetime, datetime.date)
True

如果您不想使用date,请不要这样做。有许多应用程序,其中datetime的“少量额外内存和存储”是一个重要的负担,特别是当需要将大量date存储在数据库中作为泡菜时(例如,在Zope安装中的ZODB中 - Zope Corp支付当时的PythonLabs团队来设计和实现datetime模块以开始;-))并非巧合。

编辑 - date“的意思是”

我想及时推回@ abamert的“A date间隔。当天不是00:00:00,而是整个天。“你当然可以自由地思考它,但没有这样的意图。我与主要模块设计师Guido van Rossum和Jim Fulton一起编写了几乎所有原始的datetime模块(包括Python和C版本)。

Guido非常热衷于“天真”日期和时代的概念,这是日常和时代的日常“常识”概念,它完全忽略了极客所喜欢的所有乏味的微妙之处;-)(如历史时区 - 甚至日历 - 调整,以及没有实际使用的“闰秒”给天文学家除外。对他来说,知道日期意图意味着什么的最好方法是问一个12岁的孩子。他们的回答并不重要。如果他们认为date(2014, 1, 9)意味着“整天”,那很好。如果他们想把它当作一天开始的午夜时分,那也没关系。在当天结束的午夜,或者午休时间的午夜时间,或者在不同的日子不同的时间,或者根本没有任何时间,这些区别都在你的头部到目前为止date令人担忧。 date不会鼓励或阻止其中任何一个。

现在一个极客可能会反对“但是如果我认为date(2014, 1, 9)是正午,你认为date(2014, 1, 10)是下午3点,减去它们会返回错误的答案!”。打哈欠。问一个12岁的孩子:很明显,对于天真的日期,差异恰好是1天(天真)。

这里没有任何暗示任何特定的人或应用程序“应该”发现有用的东西。许多应用程序发现它很有用。如果你的不是其中之一,请不要使用它。

总而言之,我对datetime的唯一重大遗憾是tzinfo个对象在模糊的过渡时间内无法区分“标准”和“日光”时间。 Guido的节俭感受到冒犯(在我看来过于严重)因为C struct tm“浪费了”整个inttm_isdst)这一点信息只需消除歧义过渡时期。当大多数人睡着时,在“日光​​”和“标准”时间之间切换的大多数地理区域进行这些转换并非巧合,因此对于几乎所有实际目的而言,模糊性是不可见的(“你是什么意思,凌晨2点10分?是时钟第一次读取时间是上午2:10,或者是我们再次将时钟从凌晨3点恢复到凌晨2点后的第二次?“)。但是对于那些真正关心的人来说,没有那点生活仍然是一种皇家的痛苦: - (