现在和生日之间的差异在几年,几个月,几天,一分钟

时间:2017-07-05 04:38:24

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

import datetime
birthday = datetime.datetime(1996,8,15)
differnce = datetime.datetime.now() - birthday
#This returns a timedelta object -> datetime.timedelta(7629, 36148, 156646)

现在我想精确转换timedelta对象的年,月,日和秒。 我知道我可以做的就像差异。日期// 365可以获得多年等等...... 是否有任何其他方式或方法来转换此timedelta对象 准确,轻松地分年,月,日和分钟?

3 个答案:

答案 0 :(得分:1)

我想你可能想要使用dateutil.relativedelta。这是一篇SO帖子,解释了如何使用它:

Python timedelta in years

如果这不是你想要的,那么在你的问题中提供一些示例输出可能会有所帮助。

答案 1 :(得分:1)

添加问题评论timedelta会为您提供daysseconds。因此,如果您想计算年份,则应执行一些简单的算术计算。这是计算年份的简单方法。一些代码添加您给定的代码。

import datetime
import math
birthday = datetime.datetime(1996,8,15)
differnce = datetime.datetime.now() - birthday
year = differnce.days//(365.25)
month = (differnce.days-year*365.25)//(365.25/12)
day = ((differnce.days-year*365.25) - month*(365.25/12))
print('Years=',int(year),' Months=',int(month), ' Days=',int(math.ceil(day)))

这里365.25几乎正确地用于闰年计算。有关详情,请查看herehere

答案 2 :(得分:0)

您可以使用此功能:

import datetime
import calendar

def difference(start, end):
    years = end.year - start.year
    months = end.month - start.month
    days = end.day - start.day
    hours = end.hour - start.hour
    minutes = end.minute - start.minute
    seconds = end.second - start.second
    if seconds < 0:
        minutes -= 1
        seconds += 60
    if minutes < 0:
        hours -= 1
        minutes += 60
    if hours < 0:
        days -= 1
        hours += 24
    if days < 0:
        months -= 1
        days += calendar.monthrange(start.year, start.month)[1]
    if months < 0:
        years -= 1
        months += 12
    return { 
        'years': years, 
        'months': months, 
        'days': days,
        'hours': hours,
        'minutes': minutes,
        'seconds': seconds
    }


birthday = datetime.datetime(1996,8,30)
diff = difference(birthday, datetime.datetime.now())
print(diff)

这计算两个日期之间的年份(包括闰年)。

天数的差异是天数的净差异,或者 - 如果当前日期的天数小于出生日期 - 则将出生月份剩余的天数添加到当天的号码。这可能有点武断。假设明天是我的生日(并且生日不在该月的第一天),那么输出将按预期的那样具有11个月,但是对于天组件,则为27,28,29或30,具体取决于天数出生月份......