Python 如何在不使用任何日期或时间库的情况下对小时和分钟字符串求和
我不应该使用任何日期或时间库!事实上,我可以将它们求和为普通整数,但我找不到如何将它们求和为小时和分钟,例如03:50+04:20应该是08:10,但实际上我得到了7:70,因为我仍然找不到有效的方法。任何暗示或方法都将不胜感激。多谢各位Python 如何在不使用任何日期或时间库的情况下对小时和分钟字符串求和,python,python-3.x,Python,Python 3.x,我不应该使用任何日期或时间库!事实上,我可以将它们求和为普通整数,但我找不到如何将它们求和为小时和分钟,例如03:50+04:20应该是08:10,但实际上我得到了7:70,因为我仍然找不到有效的方法。任何暗示或方法都将不胜感激。多谢各位 import re def add_time(time, duration): elems1 = re.split(r"\s", time) elems2 = re.split(r":", elems1[
import re
def add_time(time, duration):
elems1 = re.split(r"\s", time)
elems2 = re.split(r":", elems1[0])
elems2.append(elems1[1])
elems3 = re.split(r":", duration)
resH = eval(elems2[0]) + eval(elems3[0])
resM = eval(elems2[1]) + eval(elems3[1])
return f'{str(resH)}:{str(resM)} {elems2[2]}'
print(add_time("3:50 AM", "4:20"))
实际产量
7:70 AM
期望输出
08:10 AM
我认为您应该添加处理分钟数大于59和小时数大于12的条件
import re
def add_time(time, duration):
elems1 = re.split(r"\s", time)
elems2 = re.split(r":", elems1[0])
elems2.append(elems1[1])
elems3 = re.split(r":", duration)
cf = 0
resM = eval(elems2[1]) + eval(elems3[1])
if (resM > 60):
cf = 1
resM = resM - 60
resH = eval(elems2[0]) + eval(elems3[0]) + cf
if(resH > 12):
resH = resH - 12
return f'{str(resH)}:{str(resM)} {elems2[2]}'
您可以通过使用%来实现它,以跟踪小时和分钟的格式,但请记住,如果遇到60分钟,剩余的分钟应传递给小时 看看这个实现:
import re
import numpy as np
def add_time(time, duration):
elems1 = re.split(r"\s", time)
elems2 = re.split(r":", elems1[0])
elems2.append(elems1[1])
elems3 = re.split(r":", duration)
remainder_from_minutes = int(np.floor((int(elems2[1]) + int(elems3[1]))/60))
resH = (int(elems2[0]) + int(elems3[0]))%24 + remainder_from_minutes
resM = (int(elems2[1]) + int(elems3[1]))%60
am_or_pm = elems2[2] if int(resH/12)%2==0 else chr(145-ord(elems2[2][0])) + "M"
return str(resH).rjust(2,"0") + ":" + str(resM).rjust(2,"0") + " " + str(am_or_pm)
print(add_time("3:50 AM", "8:50"))
print(add_time("3:20 PM", "8:50"))
输出:
12:40 PM
12:10 AM
还固定了AM/PM符号,使用了一些ascii表格技巧,在这种情况下,12:40 AM和03:50 PM也是可以接受的我认为一个好方法是将所有内容转换为分钟,求和并将其转换为小时+分钟。这是很好的,因为通过这种方式,您将能够在将来扩展您的系统,例如,可以添加两个以上的时间值,这在其他答案中是不可能的。因为您使用的是内置长算法的Python,所以我看不出此解决方案有任何缺点哦,是的,如何处理AM/PM将非常感谢!非常感谢你!嗯,我以前从未使用过numpy,我会在这方面进行自我训练,无论如何,哦,是的,如何处理AM/PM将得到大家的赞赏和极大的帮助!允许使用12小时格式:前12小时上午和最后12小时下午。谢谢你宝贵的帮助。哦,这对我来说有点高级了,我将在接下来的几个小时里学习和理解你的实现。非常感谢Levi。像03:30这样的前导零有一个问题,这个恼人的python错误有什么解决方案吗?如果你的意思是当小时是1位数时,小时不包括前导零,那么我的最后一次编辑总是用前导0将小时填充到2位数,只需使用字符串的rjust函数。我可以回答你修改过的问题吗?为什么你不能使用例如datetime模块?因为我被要求这样做。请阅读说明。我阅读了说明:这就是为什么我问你为什么不能使用datetime模块的原因。如果你觉得我的问题相关,请向上投票。谢谢。如果你觉得我的问题相关,请投票。谢谢