如何解决显示带有时间计算的负小时?
是否可以显示负数小时? 例如: 如果用户签入和签出并已工作3个小时,但他应至少工作4个小时,则计算(3-4)应得出-1个小时(-01:00)。 但是当我进行此计算时:
checkin = datetime.datetime(1,1,8) # this is 0001-01-01 08:00:00
checkout = datetime.datetime(1,11) # 0001-01-01 11:00:00
should_work = datetime.timedelta(hours=4)
has_worked = checkout - checkin # results in 03:00:00
result = has_worked - should_work # this results into "-1 day,23:00:00" insted of "-01:00"
还有其他用于此类事情的库或日期时间函数吗?
解决方法
timedelta
对象的显示格式不是很好。减去1天,再加上23小时是 -1小时,但这很尴尬。由于有多种显示增量的方法(例如,您应该允许25小时还是应该是一天?),所以自己进行数学运算是正常的。这只是几个小时和几分钟。多天以小时> = 24表示。
import datetime
def timedelta_str(td):
s = int(td.total_seconds())
if s < 0:
s = abs(s)
neg = "-"
else:
neg = ""
m,seconds = divmod(s,60)
hours,minutes = divmod(m,60)
return f"{neg}{hours:02d}:{minutes:02d}"
checkin = datetime.datetime(1,1,8) # this is 0001-01-01 08:00:00
checkout = datetime.datetime(1,11) # 0001-01-01 11:00:00
should_work = datetime.timedelta(hours=4)
has_worked = checkout - checkin # results in 03:00:00
result = has_worked - should_work
print('result',timedelta_str(result))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。