如何将日期转换为0001-01-01的天数?

时间:2018-02-28 09:53:58

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

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

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天。我错过了什么吗?有更简单的方法吗?

3 个答案:

答案 0 :(得分:2)

这有助于

from datetime import date

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

答案 1 :(得分:1)

  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
    
  4. 现在与datetime.datetime.now().toordinal()相同。

答案 2 :(得分:0)

两个日期之间的天数可以计算如下:有关详情,请参阅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天的差异,因为开始日期和结束日期被排除在外。