可以理解输出[python]

可以理解输出[python],python,python-3.x,date,timedelta,Python,Python 3.x,Date,Timedelta,这是我的第一篇文章,所以我为格式问题道歉。 我得到了我为大学写的一段代码,它是用来计算我活了多少天,多少小时,多少分钟 def min_vivido(fech_act,fec_nac): anosViv = (fech_act%10000) - (fec_nac%10000) mesViv = ((fech_act//10000)%100) - ((fec_nac//10000)%100) diasViv = ((fech_act//10000)//100) - ((fec_nac//10000

这是我的第一篇文章,所以我为格式问题道歉。 我得到了我为大学写的一段代码,它是用来计算我活了多少天,多少小时,多少分钟

def min_vivido(fech_act,fec_nac):
anosViv = (fech_act%10000) - (fec_nac%10000)
mesViv = ((fech_act//10000)%100) - ((fec_nac//10000)%100)
diasViv = ((fech_act//10000)//100) - ((fec_nac//10000)//100)
print(anosViv)
print(anosViv*365)
total_dia = (anosViv * 365) + (mesViv * 30) + diasViv
horas_dias = total_dia * 24
min_dias = horas_dias * 60

return min_dias, horas_dias, total_dia
因此,当我尝试打印此内容时:

print(min_vivido(25072017,11101982))

我知道我活了12699天304776小时18286560分钟。问题是,如果我只看2017年和1982年之间的年份,我至少活了35年,365年是12775年,不算我多活了几个月和几天

奇怪的是,如果我试图在代码中打印

print(anosViv) and print(anosViv*365)
我得到35分和12775分


请帮助,我被卡住了

假设您的输入是试图以DDMMYYYY形式表示日期的
int
值,请查看您的
mes_viv
计算:

mesViv = ((fech_act//10000)%100) - ((fec_nac//10000)%100)
对于您的输入,
25072017
(ISO表格2017-07-25)用于
fech_法案
,而
11101982
(ISO表格1982-10-11)用于出生日期
fec_nac
,您正在计算:

mesViv = ((fech_act//10000)%100) - ((fec_nac//10000)%100)
mesViv = ((25072017//10000)%100) - ((11101982//10000)%100)
mesViv = (2507%100) - (1110%100)
mesViv = (7) - (10)
mesViv = -3
问题是,通过先对年数进行计算,你就可以对年数进行四舍五入,然后通过适当的负月数(类似的问题也会发生在天数上)来修正它。所以你的最终结果实际上是正确的(ish);实际上,你还没有度过35年,你的寿命比35年少了不到三个月,因此天数应该要少一些(大约60-90天,你瞧,你比76天少了,忽略了闰年问题)

也就是说,请使用。它将更正确地做到这一点(没有负增量,处理闰日等),而且更简单

例如,即使不更改输入和输出,您也可以:

import datetime

def numerical_date_to_date(dtint):
    # Factor out conversion from weird int-based format to datetime.date
    daymon, years = divmod(dtint, 10000)
    days, months = divmod(daymon, 100)
    return datetime.date(years, months, days)

def min_vivido(fech_act, fec_nac):
    diff = numerical_date_to_date(fech_act) - numerical_date_to_date(fec_nac)
    horas_dias = diff.days * 24
    min_dias = horas_dias * 60
    return min_dias, horas_dias, diff.days

请澄清您可以使用Python存储日期的问题,然后使用Python获取日期之间的差异。您是否打印了mesViv和diasViv?也许其中一个或两个都是负面的?考虑到7月25日是10月11日之前的几个月,你需要从35年中减去几个月,我猜大概是相差76天。“我已经活了12699天,304776小时,18286560分钟。”。我想你的意思是“我已经活了12699天,304776小时或18286560分钟。”否则这里就有(另一个)误解了。@eventHandler感谢你参与我的第一篇帖子/问题哦,你是对的。这正是我输入ints DDMMAAAA的格式。这就是为什么我的日子越来越少了。非常感谢你。