int
试图以DDMMYYYY形式表示日期的值,请查看您的
mes_viv
计算:
mesViv = ((fech_act//10000)%100) - ((fec_nac//10000)%100)
25072017
(ISO表格2017-07-25)
fech_act
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天,忽略了闰年问题)。
也就是说,请使用
the
datetime
module
. 它将更正确地做到这一点(没有负增量,处理闰日等),而且更简单。
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