如何在小于 30 天的日期时间中将年、月打印为 0?还是1年?

How can i print year,month as 0 in datetime less than 30day? or 1year?

我正在尝试获取它的月份和年份,但它引发了错误

from datetime import datetime
x = datetime(2020, 9, 8, 19, 42, 39, 264658) - datetime.fromtimestamp(1598192097.728026)
print(x.year) or (x.month) #AttributeError: 'datetime.timedelta' object has no attribute 'year'

我怎样才能得到 month , year 为 0 ?有没有使用例外的想法?

你的 x 变量没有属性 year 或 month 这里 x 存储两次之间的差异它只能 return 差异。您对两者进行了算术运算,x 是一个 class 日期类型,称为 date.timedelta。至于您的需求,您希望它 return 零年零月。您可以将 x 转换为字符串并使用 if 语句来检查年份和月份。

     from datetime import datetime

     x = datetime(2020, 9, 8, 19, 42, 39, 264658) - 
     datetime.fromtimestamp(1598192097.728026)
     print(type(x))
     print(x)
     if 'month'  in str(x):
         if 'year' in str(x):
            print(x)
         else:
            print(f'0 years {x}')
     else:
         if 'year' in str(x):
            print(x)
         else:
            print(f' 0 years 0 months {x}') 

除此之外 'datetime.timedelta' 对象没有属性 'year' - 请注意,超过一周的时间跨度是不明确的;例如一个月的天数各不相同。 你可以在这里使用的是 dateutil's relativdelta:

from datetime import datetime
from dateutil.relativedelta import relativedelta

timestamp = 1598192097.728026
dtobj = datetime(2020, 9, 8, 19, 42, 39, 264658)

x = relativedelta(dtobj, datetime.fromtimestamp(timestamp))
print(x.years, x.months)
# 0 0