所以我有一个字符串表示我转换为datetime的日期,我想打印这个日期(在utc中)和utc中当前时间之间的时差。即。如果是提前1天和5小时,请打印“01:05:00”。或者,如果提前6分钟,请打印“00:00:06”。如果日期是过去的日期,则前缀“ - ”,如“-00:00:06”。
到目前为止,我有一个非常糟糕的解决方案,如果它在27分钟之外打印出类似“0:0:27”的东西,如果是过去的2天则打印“-2:-5:-46”。我希望每次都有一致的xx:xx:xx格式。我看了很多问题,甚至不确定我是否需要使用relativedelta或者只是使用datetime.timedelta。有什么建议吗?
for ticket in json.loads(data):
ticket_rdate = ticket["time_string"]
if ticket_rdate:
ticket_rdate = datetime.datetime.strptime(ticket_rdate, "%Y-%m-%d %H:%M:%S")
difference = relativedelta(datetime.datetime.utcnow(), ticket_rdate)
ticket["time_until"] = str(difference.days * -1) + ":" + str(difference.hours * -1) + ":" + str(difference.minutes * -1) + ""
sorted_tickets.append(ticket)
return sorted_tickets
这是在python 3中。
答案 0 :(得分:0)
如果你这样做
difference = (datetime.datetime.utcnow() - ticket_rdate)
str(difference)
您将以一致的格式获得输出。您可以在此之后进行一些字符串格式化,以获得您提到的格式。
答案 1 :(得分:0)
使用字符串的格式方法,可以指定零填充。像:
now = datetime.datetime.utcnow()
diff = utcnow - ticket_rdate
negative = '-' if ticket_rdate < utcnow else ''
hours = int(diff.total_seconds() / 3600)
mins = int(diff.total_seconds() / 60)
ticket['time_until'] = '{}{}:{:02}:{:02}'.format(negative, diff.days, hours, mins)
此外,如果您想要更灵活,使用relativedelta而不是timedelta的原因。 relativedelta将让你与其他单位合作,如数月和数年,并为负增量提供更好的支持。
https://docs.python.org/2/library/datetime.html#timedelta-objects
http://labix.org/python-dateutil#head-ba5ffd4df8111d1b83fc194b97ebecf837add454
答案 2 :(得分:0)
考虑到你将精确度限制在几天,我说你并不需要使用relativedelta。如果你想要数周或数月,肯定,但你不是。
因此,在Py3中记住这一点,你可以做类似的事情:
delta = time1 - time2
delta = delta // timedelta(minutes=1)
print(str(delta))
让所提供的功能完成繁重的工作。