Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以完全停止使用datetime.date吗?_Python_Date_Datetime - Fatal编程技术网

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

Python 我可以完全停止使用datetime.date吗?,python,date,datetime,Python,Date,Datetime,在Python中,我的印象是,datetime.date基本上只是datetime.datetime的一个子集,具有较少的特性和略小的开销。我不想再使用datetime.date,原因如下: 这两种类型之间不再进行转换 datetime.date对象总是不知道时区,原因很明显。如果有时使用datetime.date,有时使用datetime.datetime 在很多情况下,我都会遇到比较datetime.date对象和datetime.datetime对象的麻烦。始终只使用一种类型可以简化比较

在Python中,我的印象是,
datetime.date
基本上只是
datetime.datetime
的一个子集,具有较少的特性和略小的开销。我不想再使用
datetime.date
,原因如下:

  • 这两种类型之间不再进行转换

  • datetime.date
    对象总是不知道时区,原因很明显。如果有时使用
    datetime.date
    ,有时使用
    datetime.datetime

  • 在很多情况下,我都会遇到比较
    datetime.date
    对象和
    datetime.datetime
    对象的麻烦。始终只使用一种类型可以简化比较

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

  • 如果我在这方面做得对,那么在Python的未来版本中,
    datetime.date
    最终将被弃用,就像
    unicode
    long
    一样。现在采用这种惯例使我走在了前面


在我看来,继续使用
datetime.date
唯一令人信服的理由是
datetime.datetime
中涉及的少量额外内存和存储。假设我不在乎额外的开销。还有其他非常令人信服的理由继续使用这个类吗?我不想改用这个惯例,但后来又后悔,因为我错过了一些重要的事情。

它们代表不同的东西

日期时间是一个特定的时间点

日期是一个时间间隔。那天不是00:00:00,而是一整天

这就是为什么不能在它们之间直接转换。这就是为什么不能用
datetime
代替
date


(两者使用相同的
timedelta
类型这一事实可能是模块中的一个缺陷,已经讨论了几次,但我怀疑它是否会得到纠正。)

这是精确的关系:

>>> import datetime
>>> issubclass(datetime.datetime, datetime.date)
True
如果您不想使用
日期
,请不要使用。在许多应用程序中,
datetime
的“少量额外内存和存储”是一个巨大的负担,特别是当大量的
date
需要作为pickle存储在数据库中时(例如,在Zope安装的ZODB中——Zope Corp付钱给当时的PythonLabs团队设计和实现
datetime
模块并不是巧合;-)

编辑-日期的含义是“

我想把@abamert的“a
date
是一个时间间隔。那天不是00:00:00,而是一整天。”你当然可以这样想,但没有这样的意图。我与主要模块设计者Guido van Rossum和Jim Fulton合作,编写了几乎所有原始的
datetime
模块(Python和C版本)

Guido非常热衷于“天真”的日期和时间概念,这是一种日常“常识”的日期和时间概念,它忽略了极客们喜欢纠缠的所有繁琐微妙之处;-)(就像历史时区——甚至日历——的调整,以及“闰秒”对任何人都没有实际意义,除了天文学家)。对他来说,要知道约会的意思,最好的办法就是问一个12岁的孩子。他们的答案并不重要。如果他们认为日期(2014年1月9日)意味着“一整天”,那就好了。如果他们喜欢把它想象成一天开始时午夜的钟声,也可以。一天结束时的午夜,或中午,或下午3点的午睡时间,或不同日子的不同时间,或根本没有时间。。。就日期而言,这些区别都在你的脑海中<代码>日期不会鼓励或阻止任何人

现在,一个极客可能会反对“但是如果我把
date(2014,1,9)
看作是中午,而你把
date(2014,1,10)
看作是下午3点,减去它们就会返回一个错误的答案!”。打哈欠。问一个12岁的孩子:很明显,对于天真的约会来说,差别正好是1天

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


总之,我对
datetime
唯一的遗憾是
tzinfo
对象在模糊的过渡时间内没有可靠的方法来区分“标准”时间和“日光”时间。Guido的节俭感被冒犯了(在我看来,这太过分了),因为C
struct tm
“浪费”了整个
int
tm_isdst
)只需要这1位信息就可以消除转换时间的歧义。大多数在“白天”和“标准”时间之间转换的地理区域在大多数人睡觉的时候进行这些转换,这不是巧合,因此几乎所有的实际目的都是看不到模糊性的(“凌晨2点10分是什么意思?这是时钟第一次显示凌晨2点10分,还是我们将时钟从凌晨3点拨回凌晨2点后的第二次?”)。但对于那些真正在乎的少数人来说,没有这一点的生活仍然是一种巨大的痛苦:-(

我想说…a
timedelta
是一个时间间隔。我写了一个很长的答案,但基本上是这样。日期不是日期时间。想想生日,它没有时间组件,所以添加一个时间组件会使管理带有
datetime
的生日对象比j更困难