如何在不到30天的日期时间将年,月打印为0?还是一年?

问题描述

我正在尝试获取月份和年份,这会引发错误

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'

我如何将月份,年份设为0?有没有使用例外的想法吗?

解决方法

您的x变量没有属性年或月,此处x存储两次只能返回差值的差。您已经对二者执行了算术运算,并且x是称为date.timedelta的类日期类型。根据您的需求,您希望它返回零年零零月。您可以将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,264658)

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