如何在字符串出现时更改字符串

时间:2017-09-10 19:00:57

标签: python python-2.7

我的代码需要一些帮助。我在更换琴弦时遇到了麻烦。

如果变量getTime3有一个字符串30,我正在检查字符串,然后我想用00替换它。在我的代码中,它会找到字符串30以将其替换为0030,这是错误的。它应该是00

以下是代码:

if getTime3 == '11:30PM':
   self.getControl(346).setLabel('12:00AM')
elif getTime3 == '12:30PM':
     self.getControl(346).setLabel('1:00AM')
else:
    ind = getTime3.find(':')
    if getTime3[ind+1:ind+3]=='30':
       getTime3 = getTime3[:ind]+':00'+getTime3[+2:]
       self.getControl(346).setLabel(getTime3)

    else: 
       getTime3 = str(int(getTime3[:ind])+1)+':30'+getTime3[+2:]
       self.getControl(346).setLabel(getTime3)

我期望两种特殊情况,当程序找到:时,它会检查是否存在30然后将当前小时更改为下一小时并创建一个新字符串AM / PM标签,例如:从8更改为9并将30替换为00,以使其显示9:00PM。如果结尾为00,那么我想将00更改为30。我想在分钟部分添加30并再次保留AM / PM部分。如果getTime3包含字符串11:30AM,那么我想将其更改为12:00PM

是否可以帮助我解决如何修复0030以使其显示00并添加下一个小时?

2 个答案:

答案 0 :(得分:1)

使用Python,在x[a:b](包括)的切片中切片为a,并在b处结束(不包括)。

所以:getTime3[:ind]是从0到 ind 独家的切片,即没有&#34;:&#34;。< / p>

索引是绝对索引,而不是相对索引。因此getTime3[+2:]getTime3[2:]相同,它对应于从索引2开始的子字符串。

你想要的是:

getTime3 = getTime3[:ind] + ':00' + getTime3[ind + 3:]
# or
getTime3 = getTime3[:ind + 1] + '00' + getTime3[ind + 3:]

示例:

getTime3 = '08:30PM'
ind = getTime3.index(":")
getTime3[:ind] + ':00' + getTime3[ind + 3:]
# -> '08:00PM'

修改

如果您想按时进行一些计算,可以使用datetime模块。

time_fmt = '%I:%M%p'

用于表示时间的格式如下&#39; 09:30 PM&#39;,其中:

  • %I小时(12小时制)作为零填充十进制数。
  • %M分钟为零填充十进制数。
  • %p Locale相当于AM或PM。

如何添加30分钟:

import datetime

time3 = '09:30PM'
dt3 = datetime.datetime.strptime(time3, time_fmt)
dt3 += datetime.timedelta(minutes=30)
time3 = dt3.strftime(time_fmt)

如果要将分钟设置为0,则可以执行以下操作:

dt3 = datetime.datetime.strptime(time3, time_fmt)
dt3 = d3.replace(minute=0)

答案 1 :(得分:-1)

请不要使用错误的工具完成任务。您正在操纵时间,但使用字符串来执行此操作。从下午11:30开始到上午12:00:

import datetime
t3 = datetime.datetime.strptime(getTime3, '%I:%M%p')
t3 += datetime.timedelta(minutes=30)
print(t3.strftime('%I:%M%p'))

添加timedelta(minutes=30)使意图非常明确。一些相关文档位于https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior