我有一个time。我想要其中的日,小时和分钟-作为元组或字典…我并不大惊小怪。

这些年来,我肯定用十几种语言做过十几次,但Python通常对所有问题都有一个简单的答案,所以我想在抛出一些令人作呕的简单(但冗长)数学之前,在这里问一下。

富兹先生提出了一个很好的观点。

我处理的是“列表”(有点像ebay列表),其中每个列表都有一个持续时间。我试图通过做when_added + duration - now找到剩下的时间

我说的对吗,这不包括夏令时?如果不是,最简单的增加/减少一个小时的方法是什么?


当前回答

对于所有前来寻找实现的人:

以上帖子与datetime相关。Timedelta,遗憾的是它没有小时和秒的属性。到目前为止还没有提到,有一个包,里面有这些。你可以在这里找到它:

查看来源:https://github.com/andrewp-as-is/timedelta.py 可通过pip: https://pypi.org/project/timedelta/获得

示例—计算:

>>> import timedelta

>>> td = timedelta.Timedelta(days=2, hours=2)

# init from datetime.timedelta
>>> td = timedelta.Timedelta(datetime1 - datetime2)

—属性:

>>> td = timedelta.Timedelta(days=2, hours=2)
>>> td.total.seconds
180000
>>> td.total.minutes
3000
>>> td.total.hours
50
>>> td.total.days
2

我希望这能帮助到一些人……

其他回答

timedelta有一个天和秒属性。您可以自己轻松地转换它们。

我不明白

days, hours, minutes = td.days, td.seconds // 3600, td.seconds // 60 % 60

这个怎么样

days, hours, minutes = td.days, td.seconds // 3600, td.seconds % 3600 / 60.0

每分钟的分和秒都是浮点数。

如果使用pandas(至少版本>1.0),Timedelta类有一个components属性,该属性返回一个命名元组,其中所有字段都有很好的布局。

e.g.

import pandas as pd
delta = pd.Timestamp("today") - pd.Timestamp("2022-03-01")
print(delta.components)

我使用了以下方法:

delta = timedelta()
totalMinute, second = divmod(delta.seconds, 60)
hour, minute = divmod(totalMinute, 60)
print(f"{hour}h{minute:02}m{second:02}s")
timedelta = pd.Timestamp("today") - pd.Timestamp("2022-01-01")
print(timedelta.components)
print(timedelta.components.days)
print(timedelta.components.seconds)

将返回如下内容:

Components(days=281, hours=2, minutes=24, seconds=3, milliseconds=72, microseconds=493, nanoseconds=0) 
281
3