Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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查找两个日期(以年为单位)之间的差异,剩余部分以天为单位_Python_Output_Date Arithmetic - Fatal编程技术网

用Python查找两个日期(以年为单位)之间的差异,剩余部分以天为单位

用Python查找两个日期(以年为单位)之间的差异,剩余部分以天为单位,python,output,date-arithmetic,Python,Output,Date Arithmetic,如果产出以年表示,剩余的以天表示,人们如何发现两个日期之间的差异 示例1:如果这两个日期分别为1981年6月1日和2001年8月23日,则结果应为20年83天 示例2:如果这两个日期分别为2002年1月1日和2003年12月30日,则结果应为1年363天 我不关心结果的格式;我只需要知道计算年数和日数的最简单的方法 谢谢大家! 您需要使用datetime和relativedelta模块 import datetime from dateutil.relativedelta import rela

如果产出以年表示,剩余的以天表示,人们如何发现两个日期之间的差异

示例1:如果这两个日期分别为
1981年6月1日
2001年8月23日
,则结果应为
20年83天

示例2:如果这两个日期分别为
2002年1月1日
2003年12月30日
,则结果应为
1年363天

我不关心结果的格式;我只需要知道计算年数和日数的最简单的方法


谢谢大家!

您需要使用datetime和relativedelta模块

import datetime
from dateutil.relativedelta import relativedelta

start_date = datetime.datetime(1981,6,1)
end_date = datetime.datetime(2002,1,1)

difference_in_years = relativedelta(end_date, start_date)
print(difference_in_years)

您需要使用datetime和relativedelta模块

import datetime
from dateutil.relativedelta import relativedelta

start_date = datetime.datetime(1981,6,1)
end_date = datetime.datetime(2002,1,1)

difference_in_years = relativedelta(end_date, start_date)
print(difference_in_years)

使用内置模块
datetime
,您可以轻松获得天数

>>> import datetime

>>> foo = datetime.date(2001, 8, 23) - datetime.date(1981, 6, 1)
>>> foo
datetime.timedelta(days=7388)
>>> foo.days
7388

>>> bar = datetime.date(2003, 12, 30) - datetime.date(2002, 1, 1)
>>> bar
datetime.timedelta(days=728)
>>> bar.days
728
dateutil
模块可以提供年数,但也会输入月数

>>> import datetime
>>> from dateutil.relativedelta import relativedelta

>>> relativedelta(datetime.date(2001, 8, 23), datetime.date(1981, 6, 1))
relativedelta(years=+20, months=+2, days=+22)

>>> relativedelta(datetime.date(2003, 12, 30), datetime.date(2002, 1, 1))
relativedelta(years=+1, months=+11, days=+29)
不过,在使用月数时要小心。一个月的定义不如一天。上例中的11个月是6个31天月、4个30天月和1个28天月的组合。因此,一般来说,您不能使用它来获取天数。我建议编写一个函数,以获得所需形式的差异

import calendar
import datetime
from dateutil.relativedelta import relativedelta

def get_delta(date2, date1):
    '''calculate the delta between two datetime.date objects (date2 the newer date)'''

    number_of_leap_years = sum(1
                               for yr in range(date1.year, date2.year + 1)
                               if calendar.isleap(yr))
    number_of_years = relativedelta(date2, date1).years

    total_number_of_days = (date2 - date1).days
    number_of_days = total_number_of_days
                     - 365 * number_of_years
                     - number_of_leap_years

    return f'{number_of_years} years, {number_of_days} days'

使用内置模块
datetime
,您可以轻松获得天数

>>> import datetime

>>> foo = datetime.date(2001, 8, 23) - datetime.date(1981, 6, 1)
>>> foo
datetime.timedelta(days=7388)
>>> foo.days
7388

>>> bar = datetime.date(2003, 12, 30) - datetime.date(2002, 1, 1)
>>> bar
datetime.timedelta(days=728)
>>> bar.days
728
dateutil
模块可以提供年数,但也会输入月数

>>> import datetime
>>> from dateutil.relativedelta import relativedelta

>>> relativedelta(datetime.date(2001, 8, 23), datetime.date(1981, 6, 1))
relativedelta(years=+20, months=+2, days=+22)

>>> relativedelta(datetime.date(2003, 12, 30), datetime.date(2002, 1, 1))
relativedelta(years=+1, months=+11, days=+29)
不过,在使用月数时要小心。一个月的定义不如一天。上例中的11个月是6个31天月、4个30天月和1个28天月的组合。因此,一般来说,您不能使用它来获取天数。我建议编写一个函数,以获得所需形式的差异

import calendar
import datetime
from dateutil.relativedelta import relativedelta

def get_delta(date2, date1):
    '''calculate the delta between two datetime.date objects (date2 the newer date)'''

    number_of_leap_years = sum(1
                               for yr in range(date1.year, date2.year + 1)
                               if calendar.isleap(yr))
    number_of_years = relativedelta(date2, date1).years

    total_number_of_days = (date2 - date1).days
    number_of_days = total_number_of_days
                     - 365 * number_of_years
                     - number_of_leap_years

    return f'{number_of_years} years, {number_of_days} days'

你已经试过什么Python代码了?你已经试过什么Python代码了?丹尼尔,谢谢。但是我尝试了你的代码,结果以年和月来表示,而不是以年和天来表示。不过,我不知道有
relativedelta
模块,所以我可以从这里找到我需要的东西。再次谢谢你。丹尼尔,谢谢你。但是我尝试了你的代码,结果以年和月来表示,而不是以年和天来表示。不过,我不知道有
relativedelta
模块,所以我可以从这里找到我需要的东西。再次感谢,谢谢。我对答案并不完全满意,因为我希望有一些Python模块能够给出答案,而不必手动创建将月转换为天的函数,但您的函数做到了这一点,并且是提交的最佳答案,您的
get_delta()
函数似乎正是我所需要的(虽然我还没有完全测试过)。再次感谢。谢谢。我对答案不太满意,因为我希望有一些Python模块能够给出答案,而不必手动创建函数将月转换为天,但您的函数做到了这一点,并且是提交的最佳答案,而且您的
get_delta()
函数似乎完全符合我的需要(尽管我还没有完全测试过)。再次感谢。