我想将两个日期时间与精确的字符串输出进行比较,例如“ 3小时,2分钟,46秒”。现在,假设我在UTC中有两个datetime对象,我需要它们能够是任意数量,但仍要切掉不需要的值。示例:
>>> import datetime
>>> date1 = datetime.datetime.now()
>>> date2 = datetime.datetime.fromtimestamp(123456789)
>>> date2 - date1
datetime.timedelta(-16362, 59566, 655021)
现在,我可以使用datetime.datetime.strftime()
作为后续措施,但是由于我可以遇到的值范围很广(从1秒钟到几个月),所以我想切断不需要的值并避免“ 0个月零周”。等等。”和“ 1小时0分0秒”(不舍入)(值始终为 )。有没有一种有效的方法可以动态地执行此操作以仅显示相关时间值?我已经浏览了其他类似How do I find the time difference between two datetime objects in python?的问题,但没有一个问题能完全回答我的问题,经过许多小时的修补,我无法自己解决这个问题。
答案 0 :(得分:0)
问题:...是否只显示相关时间值?
以下实现了您自己的class Timedelta
:
class Timedelta(object):
def __init__(self, td):
self._td = td
def _calc(s, f):
_s = int(s % f)
return _s, int(s / f)
s, self.hours = _calc(self._td.seconds, (60 * 60))
self.seconds, self.minutes = _calc(s, 60)
def __str__(self):
r = ""
for v in [('Days', self._td.days), ('Hours', self.hours), ('Minutes', self.minutes), ('Seconds', self.seconds)]:
if v[1] != 0:
lingua = v[0]
if v[1] == 1: lingua = v[0][:-1]
r += "{} {} ".format(v[1], lingua)
return r
def __repr__(self):
return "({}) Days:{} Hours:{} Minutes:{} Seconds:{}"\
.format((self._td.seconds), self._td.days, self.hours, self.minutes, self.seconds)
用法:
date1 = dt.datetime(2018, 9, 17, hour=18, minute=23, second=0)
date2 = dt.datetime(2018, 9, 17, hour=22, minute=23, second=10)
dtt = date2 - date1
print("dtt:{}".format(dtt))
tdelta = Timedelta(date2 - date1)
print("Timedelta::\__repr\__: {}".format(tdelta.__repr__()))
print("Timedelta::\__str\__: {}".format(tdelta))
输出:
dtt:4:00:10
Timedelta :: __ repr__:(14410)天:0小时:4分钟:0秒:10
Timedelta:__ str__: 4小时10秒
使用Python:3.4.2测试