Python 如何在不使用任何日期或时间库的情况下对小时和分钟字符串求和

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[

我不应该使用任何日期或时间库!事实上,我可以将它们求和为普通整数,但我找不到如何将它们求和为小时和分钟,例如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[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模块的原因。如果你觉得我的问题相关,请向上投票。谢谢。如果你觉得我的问题相关,请投票。谢谢