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

gal*_*ant 7 python datetime date

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

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

  • datetime.date由于显而易见的原因,对象始终是时区不知道的.这使得在整个应用程序中概括时区处理变得更加困难,如果有时您正在使用datetime.date,有时您正在使用datetime.datetime

  • 在很多情况下,我偶然遇到头痛,比较datetime.date物体和datetime.datetime物体.始终只使用一种类型使比较更简单.

  • 格式化之间的差异datetime.date,并datetime.datetime应该是一个格式化的唯一问题.将差异进一步深入到底层类中会给语言带来不必要的复杂性.

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

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

aba*_*ert 12

它们代表不同的东西.

A datetime是特定时间点.

A date时间间隔.当天不是00:00:00,而是一整天.

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

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

  • @galarant:不,`timedelta`是_duration_._interval_有一个开始和一个端点."datetime"和"timedelta"一起可以定义一个区间. (4认同)

Tim*_*ers 9

这是精确的关系:

>>> import datetime
>>> issubclass(datetime.datetime, datetime.date)
True
Run Code Online (Sandbox Code Playgroud)

如果你不想使用date,根本就不要.有许多应用程序,其中"a涉及的少量额外内存和存储" datetime是一个很大的负担,特别是当大量的dates需要作为pickle存储在数据库中时(例如,在Zope安装中的ZODB中 -并且Zope Corp支付当时的PythonLabs团队来设计和实现该datetime模块并不是巧合;-)).

编辑 - 什么是date"手段"

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

Guido非常热衷于"天真"日期和时代的概念,这是日常和时代的日常"常识"概念,它忽略了极客所喜欢的所有乏味的微妙之处;-)(如历史时区 - 甚至日历 - 除天文学家外,任何人都没有实际使用的调整和"闰秒".对他而言,了解约会意图的最佳方式是问一个12岁的孩子.他们的回答并不重要.如果他们认为date(2014, 1, 9)意味着"整天",那很好.如果他们想把它当作一天开始的午夜时分,那也没关系.在一天结束的午夜,或者午休时间,或午休时间的下午3点,或者在不同的日子不同的时间,或者根本没有时间......这些区别都在你的脑海里date. date不鼓励或劝阻任何人.

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

这里没有任何暗示任何特定的人或应用程序"应该"找到有用的东西.许多应用确实发现它很有用.如果您的不是其中之一,请不要使用它.

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

  • _总而言之,我对 datetime 的唯一主要遗憾是 tzinfo 对象没有可靠的方法来区分模棱两可的过渡时间中的“标准”时间和“日光”时间。_花了很长时间,但我们即将修复与[PEP 495](https://www.python.org/dev/peps/pep-0495)。 (2认同)