微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我不应该使用任何日期或时间库!实际上,我能够将它们求和为正常整数,但是我找不到如何将它们求和为小时和分钟,因此例如,“ 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

解决方法

您可以使用%来实现小时和分钟的格式,从而自己实现它,但是请记住,如果剩下的分钟数是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也可以接受

,

我认为,当分钟数大于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]}'
,

我认为,执行此操作的一种好方法是将所有内容都转换为分钟,将它们求和并将其转换为小时+分钟。这很好,因为这样您将来就可以扩展系统,例如,可以添加两个以上的时间值(在其他答案之一中则不可能)。因为您使用的是内置长算法的Python,所以我看不到该解决方案的任何缺点

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。