【问题标题】:Is there a datetime ± infinity?有日期时间±无穷大吗?
【发布时间】:2014-04-16 20:32:40
【问题描述】:

对于浮点数,我们有像 -inf(和 +inf)这样的特殊对象,它们可以保证比较小于(和大于)其他数字。

我需要类似的日期时间,有这样的东西吗? In-db 排序必须与 django 查询集过滤器一起正常工作,理想情况下它应该与 db 无关(但至少它必须与 mysql 和 sqlite 一起工作)和时区无关。

目前我正在使用 null/None,但它会创建非常混乱的查询,因为 None 正在完成 -inf 和 +inf 的工作,我必须明确在查询中考虑所有这些情况。

【问题讨论】:

  • 日期通常存储为平台的整数(秒分辨率)或整数+整数结构(以提供亚秒分辨率),这意味着你有一个上限和下限,但不是特殊的“inf”,“ NaN”等,实际上是用浮点标准编码的。

标签: python sql django datetime


【解决方案1】:

试试这个:

>>> import datetime
>>> datetime.datetime.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)

对于datetimedatetime,您可以获得min/max

【讨论】:

  • 很遗憾,这与支持 tz 的日期时间对象不兼容。
【解决方案2】:

没有;您拥有的最好的是 datetime.datetime.mindatetime.datetime.max 值。

这些保证是最小和最大的datetime值,但datetime.datetime.min == datetime.datetime.min仍然是True;其他一切都更大。 datatime.datetime.max 值则相反。

datetime.datedatetime.time 也有 minmax 值。

【讨论】:

  • 这些与 db 无关?
  • @wim:这些是 datetime 对象;如果您现在将 datetime 对象传递给您的 Django 查询,那么这些没有什么不同。它们只是您可以创建的最小和最大的datetime 对象。
  • 这些值仍有可能超出基础数据库的范围(因此将它们作为常量进行比较可能会失败),或者数据库可以表示(并且可能包含)超出此范围的日期时间范围。考虑这种情况可能会很好。
  • @lanzz:确实;比较也适用于 1000 年之前的日期;至少在我的 5.6 设置中。好像那里的文档已经过时了。
【解决方案3】:

如果有人在 Pandas 数据框中使用日期:

>>> import pandas as pd
>>> pd.Timestamp.min
Timestamp('1677-09-21 00:12:43.145225')
>>> pd.Timestamp.max
Timestamp('2262-04-11 23:47:16.854775807')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-13
    • 2022-08-12
    • 2016-01-13
    • 1970-01-01
    • 2023-03-16
    • 2017-06-12
    • 1970-01-01
    • 2019-03-19
    相关资源
    最近更新 更多