【问题标题】:Number of days between today and a negative year ("-2580,01,01", today")今天和负年之间的天数(“-2580,01,01”,今天“)
【发布时间】:2020-02-16 09:06:31
【问题描述】:

我需要计算两个日期之间的天数。一个是今天,另一个是-2580,01,01。

我已尝试使用 datetime 库,但我不能,因为 datetime 库不接受负数年(MIN=1,MAX=9999)。

我试过dateutil.relativedelta:

from datetime import *
from dateutil.relativedelta import *
import calendar

RightNOW = datetime.now() # with full time
JustTODAY = date.today() # only days

PastTime = JustTODAY+relativedelta(years=-4600)

print(PastTime)
Traceback (most recent call last):
  File "GoblinTest.py", line 11, in <module>
    PastTime = JustTODAY+relativedelta(years=-4600)
  File "/usr/lib/python3.8/site-packages/dateutil/relativedelta.py", line 405, in __radd__
    return self.__add__(other)
  File "/usr/lib/python3.8/site-packages/dateutil/relativedelta.py", line 387, in __add__
    ret = (other.replace(**repl)
ValueError: year -2580 is out of range

【问题讨论】:

  • 其中一个主要问题是,确切的日期在很久以前变得非常模糊......您在这里尝试进行什么样的计算以及您期望结果的准确度如何?跨度>
  • 如果您只对相对数字感兴趣(而不关心您是否偏离了一两天),您可以简单地移动时间刻度并计算今天和今天之间的天数 + 偏移量(4600 )
  • 您可以使用像jdcal 这样的第三方模块,因为:'[所有] 函数都是“预想的”。这意味着它们适用于相关日历不在的日期有效。'

标签: python python-3.x python-datetime python-dateutil


【解决方案1】:

问题是 datetime 仅支持 years &gt; 0 作为 datetime。

>>> datetime.datetime(2,1,1) - relativedelta(years=1)
datetime.datetime(1, 1, 1, 0, 0)
>>> datetime.datetime(2,1,1) - relativedelta(years=2)
ValueError: year 0 is out of range

docs中所述:

datetime 模块导出以下常量: 日期时间.MINYEAR 日期或日期时间对象中允许的最小年份数。 MINYEAR 是 1。

【讨论】:

    【解决方案2】:

    通过接受dateutil 模块和datetime 模块的限制来解决问题。

    使用years=1,并在前几天手动添加:2581 * 365 = 942065

    这会限制您的准确性;并且您需要在应用程序中说明并考虑这些假设。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      相关资源
      最近更新 更多