将timedelta转换为天,小时和分钟
我有一个timedelta。 我想要的是那些日子,时间和分钟 – 无论是作为一个元组还是一本字典…我都没有被诅咒。
这么多年来,我必须用十几种语言来完成这个工作,但是Python通常对所有事情都有一个简单的答案,所以我想在这里先讨论一些令人讨厌的简单(但是冗长)的math问题。
Fooz先生提出了一个很好的观点。
我正在处理“列表”(有点像易趣列表),每个人都有一个持续时间。 我正在尝试通过执行when_added + duration - now
find剩下的when_added + duration - now
我是否正确地说,不会考虑DST? 如果不是,加/减一小时最简单的方法是什么?
如果你有一个datetime.timedelta
值td
, td.days
已经给你你想要的“天”。 timedelta
值将timedelta
保留为秒(而不是直接的小时或分钟),所以你确实必须执行“恶化简单的math”,例如:
def days_hours_minutes(td): return td.days, td.seconds//3600, (td.seconds//60)%60
这是一个更紧凑,你得到两个小时,分钟和秒。
days = td.days hours, remainder = divmod(td.seconds, 3600) minutes, seconds = divmod(remainder, 60) # If you want to take into account fractions of a second seconds += td.microseconds / 1e6
days, hours, minutes = td.days, td.seconds // 3600, td.seconds // 60 % 60
至于DST,我认为最好的办法是将两个datetime
对象转换为秒。 这样系统会为您计算DST。
>>> m13 = datetime(2010, 3, 13, 8, 0, 0) # 2010 March 13 8:00 AM >>> m14 = datetime(2010, 3, 14, 8, 0, 0) # DST starts on this day, in my time zone >>> mktime(m14.timetuple()) - mktime(m13.timetuple()) # difference in seconds 82800.0 >>> _/3600 # convert to hours 23.0
我不明白
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
作为一个浮点数,你得到一分钟和几秒钟的时间。
timedeltas有一个days
seconds
属性..你可以轻松地转换他们自己。