【问题标题】:How to convert a date to a number of days from 0001-01-01?如何将日期转换为从 0001-01-01 开始的天数?
【发布时间】:2018-08-08 03:45:15
【问题描述】:

如何将任何日期转换为天数?这是我尝试过的:

import datetime
import calendar


def leap_day_counter(yr):
    leap_days = 0
    # since 1582 11 days are missing
    if yr >= 1582:
        leap_days += 11
    for specific_year in range(1, yr):
        if calendar.isleap(specific_year):
            leap_days += 1
    return leap_days


def month_to_day(yr, mth):
    all_days = 0
    for specific_month in range(1, mth+1):
        days_in_month = calendar.monthrange(yr, specific_month)
        all_days += days_in_month[1]
    return all_days


date = datetime.datetime.now()
days_passed = ((date.year * 365) + leap_day_counter(date.year)) + month_to_day(date.year, date.month) + date.day
print(days_passed)

我有 737 158 天,但根据 https://www.timeanddate.com/date/durationresult.html 我应该有 736 755 天。我错过了什么吗?有更简单的方法吗?

【问题讨论】:

标签: python python-3.x python-2.7 date datetime


【解决方案1】:

这有帮助

from datetime import date

d0 = date(2000, 1, 01)
d1 = date.today()
delta = d1 - d0
print delta.days

【讨论】:

  • 感谢您的回答。不幸的是,如果我们将日期更改为 1、1、1,我们仍然会错过 2 或 3 天(我在这里与结果进行比较:timeanddate.com/date/…
【解决方案2】:
  1. 一年中的天数是否适合您?

    01/01/0001 - 01/01/2018 有 736,696,你说有 737,060。这大约是 1 年太多了。

    (date.year - 1) * 365
    
  2. 修复上述问题后,我们应该检查 01/01/0001 - 01/02/2018 是否有效。

    网站上说的是 736,727,而你说的是 736,754。这大约是整个二月的时间太多了。

    for specific_month in range(1, mth)
    
  3. 闰年太多了。

    for specific_year in range(1, yr)
    

    您还可以将此代码简化为:

    def leap_day_counter(y):
        y -= 1
        return y//4 - y//100 + y//400
    

现在与datetime.datetime.now().toordinal() 相同。

【讨论】:

  • 你确定几个月?我们可以用 (print(month_to_day(1,1)) 检查函数,而不是 31 我们会得到 0 我认为它是正确的。虽然我可能错了
  • 我认为我们需要在其他地方搜索几天我了解到例如我们在 1582 年失去了 11 天我更新了主要问题中的功能
  • 我还了解到假设每 4 年为闰年是错误的(这就是我使用日历模块的原因)
  • 没有理由这么激进
【解决方案3】:

两个日期之间的天数可以计算如下:更多信息请参见here。希望这可能会有所帮助

>>>enddate = "2018/03/12" +" 23:59"
>>>enddate = datetime.strptime(enddate, "%Y/%m/%d %H:%M")
>>>(enddate-datetime.now()).days
12

更新:编辑

>>>import datetime
>>>checkdate = datetime.datetime.strptime("0001-01-01", "%Y-%m-%d")
>>>days = (datetime.datetime.now()-checkdate).days
>>>days
   736757

2 天的差异,因为开始日期和结束日期被排除在外。

【讨论】:

  • 感谢您的回答,但我不想计算两个日期之间的差异。
  • @Hsin 看看
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 2015-12-31
  • 2018-12-14
  • 2013-07-23
相关资源
最近更新 更多