微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在不到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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。