如何从 timedelta 中删除秒和微秒?

How to remove seconds and microseconds from a timedelta?

我想打印两个日期之间的时间差,没有秒或纳秒。我还希望能够只提取日期或月份。这可能吗?

这是我目前拥有的代码:

import datetime

t1 = datetime.datetime(2021, 9, 10, 10, 00)
t2 = datetime.datetime.today()

delta = t1 - t2

print(delta)

您可以使用 days 属性 获取 timedelta 中的天数:

import datetime

t1 = datetime.datetime(2021, 9, 10, 10, 00)
t2 = datetime.datetime.today()

delta = t1 - t2

print(delta.days)

Repl.it

要得到没有秒和微秒的,使用 slice 字符串版本

from datetime import datetime
delta = datetime(2021, 9, 10, 10, 00) - datetime.now()

print(delta)             # 15 days, 11:24:04.767145
print(str(delta)[:-10])  # 15 days, 11:24

要获取日期(或月份),请使用 days 属性

from datetime import datetime
delta = datetime(2021, 9, 10, 10, 00) - datetime.now()

print(delta.days)       # 15
print(delta.days / 30)  # 0.5

您可以在时间戳上使用 mod 将其四舍五入为您想要的任何值。

import datetime

t1 = datetime.datetime(2021, 9, 10, 10, 00)
t2 = datetime.datetime.today()
t2s = t2.timestamp()
# mod 60 removes seconds and fractions, mod 1 would just remove fractions of second, etc
t2s = t2s - t2s % 60
t2new = datetime.datetime.fromtimestamp(t2s)

print(t2new)

如果要忽略原来datetime中的second/microsecond,用the replace method将它们设置为0,然后执行计算:

import datetime

t1 = datetime.datetime(2021, 9, 10, 10, 00)  # Already lacks seconds
t2 = datetime.datetime.today().replace(second=0, microsecond=0)  # Gets datetime without second/microsecond data

delta = t1 - t2

print(delta)

你不能从 timedelta 中提取月份(因为它没有超过天的粒度;毕竟一个月或一年没有固定长度),但是 .days 属性timedelta 会告诉你它代表多少天。

我省略了 timedelta 本身的截断数据,因为其他答案已经充分涵盖了(实际上,我发现大多数人都希望或可以容忍正在执行的截断输入,而不是结果)。