python 中的持续时间

Time Duration in python

给定两个字符串:

      ex:

      start_time="3:00 PM" 
      Duration="3:10"

开始时间采用 12 小时制(以 AM 或 PM 结束),持续时间 表示小时数和分钟数

假设开始时间有效 times.The 分钟的持续时间将 可以是小于60的整数,但是小时可以是任意整数。

我需要将持续时间添加到开始时间和 return 结果 (不使用任何图书馆)。 结果应采用 12 小时制格式(以 AM 或 PM 结尾)表示 小时数和分钟数

      ex:

      start_time = "6:30 PM"
      Duration =  "205:12"
      # Returns: 7:42 AM
      

我尝试并最终得到了所需的答案,但无法为以下内容生成正确的上午或下午 添加后的结果。

      what I Tried:
      
      start_time = "6:30 PM"
      Duration =  "205:12"
       
     #My answer =7:42 
     #expected :7:42 AM

有人可以帮助我在添加开始后生成正确的 AM 或 PM 的逻辑吗 时间和持续时间。

def add_time(a,b):

a=a.split()
b=b.split()

be=int(a[0][:a[0].find(':')])
af=int(a[0][a[0].find(':')+1:])
be1 = int(b[0][:b[0].find(':')])
af1 = int(b[0][b[0].find(':') + 1:])

return(((be+be1)//24)+1)
s=be+(be1)%12
p=af+af1

if ((s>12) and (p<60)) :
    return(str(s-12)+":"+str(p))

elif ((s<12) and (p>60))  :
    f = p-60
    if len(str(f))<=1:
      return(str(s+1)+":"+str('0'+str(f)))
    else:
      return (str(s + 1)+":"+(str(f)))

elif ((s<12) and (p<60)) :
    return(str(s)+":"+str(p))

elif ((s>12) and (p>60)):
    f=p-60
    if len(str(f)) <= 1:
        return (str((s -12)+1)+":"+('0' + str(f)))
    else:
        return (str((s -12)+1)+":"+(str(f)))





   print(add_time("10:10 PM", "3:30"))
   # Returns: 1:40 AM 
   print(add_time("11:43 PM", "24:20"))
   # Returns: 12:03 AM
  

       

您的代码似乎没有涵盖所有边缘情况,例如add_time("11:43 PM", "1:20") returns None 因为案例 s==12 没有涵盖。 因此,应该在相应的 if 条件中放置 <= 而不是 <。分钟数的增加导致小时数大于 12 的情况,尽管小时数本身的增加 而不是 ,也不包括在内。所以我们应该先检查分钟,再检查小时,而不是同时检查。
为了使代码更具可读性,我们使用 f-strings 并且可以使用带有参数的 str.split() ,请原谅我对代码进行了相当大的更改:

def add_time(a,b):                                                                                                                                              
    start = a.split()                                                           
    start_h, start_m = [int(val) for val in start[0].split(':')]                
    start_app = start[1]                                                        
    dur_h, dur_m = [int(val) for val in b.split(':')]                           
                                                                                
    end_m = start_m+dur_m                                                       
    end_h = end_m//60                                                           
    end_m %= 60                                                                 
    end_h += start_h+dur_h                                                      
                                                                                
    if (end_h//12)%2==0:                                                        
        end_app = start_app                                                     
    else:                                                                       
        end_app = 'AM' if start_app=='PM' else 'PM'                             
                                                                                
    return f'{end_h:02}:{end_m:02} {end_app}'