Python-将时间格式12:00a转换为24小时
我在一个数组中存储了大量时间,需要将其转换为24小时时间 ['06:00a-11:00a','07:00p-11:00p','09:00a-04:00p','09:00a-04:00p','10:00a-04:00p','10:00a-03:00p'] 我不能使用%r,因为符号不是“am”或“pm”Python-将时间格式12:00a转换为24小时,python,arrays,datetime,time,Python,Arrays,Datetime,Time,我在一个数组中存储了大量时间,需要将其转换为24小时时间 ['06:00a-11:00a','07:00p-11:00p','09:00a-04:00p','09:00a-04:00p','10:00a-04:00p','10:00a-03:00p'] 我不能使用%r,因为符号不是“am”或“pm” 实现这一目标的最佳方式是什么 它有点笨重,但基本上,您可以提取每个字符串并检查最后一个字符。如果它是a,只需丢弃它即可。如果是p,请在冒号前的数字加上12: def translate_times(
实现这一目标的最佳方式是什么 它有点笨重,但基本上,您可以提取每个字符串并检查最后一个字符。如果它是
a
,只需丢弃它即可。如果是p
,请在冒号前的数字加上12:
def translate_times(s):
# Remove space at the begining and split according to the -
each = s[1:].split('-')
for i in range(len(each)):
if each[i][5] == 'a':
each[i] = each[i][0:5]
else:
each[i] = str(int(each[i][0:2]) + 12) + ':' + each[i][3:5]
return '-'.join(each)
orig = [' 06:00a-11:00a', ' 07:00p-11:00p', ' 09:00a-04:00p', ' 09:00a-04:00p', ' 10:00a-04:00p', ' 10:00a-03:00p']
result = [translate_times(x) for x in orig]
您只需在每次添加一个
'm'
,然后strtime
将对其进行解析
单行线
输出(为清晰起见进行了编辑):
可读的
这可能不是最快的解决方案,但会提供您要求的输出:
old = [' 06:00a-11:00a', ' 07:00p-11:00p', ' 09:00a-04:00p', ' 09:00a-04:00p', ' 10:00a-04:00p', ' 10:00a-03:00p']
import time
解决上午/下午问题:
am = list(map(lambda x:x.replace('a','am'),old))
pm = list(map(lambda x:x.replace('p','pm'),am))
删除空格并拆分“-”字符:
times = [i.strip() for i in pm];times = [i.split('-') for i in times]
将转换时间返回到请求格式的列表理解:
[i+'-'+j代表i,j在zip中(时间列表[::2],时间列表[1::2])]
不确定
%r
是什么意思。但是您可以将字符串中的所有'a'
替换为'am'
,将所有'p'
替换为'pm'
,并使用“%r
”。这是一个非常优雅的解决方案。我在笔记本中尝试了这个方法,需要修改为datetime.datetime.strtime
,以使其正常工作。这仅仅是一个输入错误,还是由于Python版本?我使用2.7进行了测试。很抱歉,我没有提到,您需要此导入:from datetime import datetime
。您可以自由地使用import datetime
并声明完整的名称空间,不过我更愿意在这里简短地给出答案。
old = [' 06:00a-11:00a', ' 07:00p-11:00p', ' 09:00a-04:00p', ' 09:00a-04:00p', ' 10:00a-04:00p', ' 10:00a-03:00p']
import time
am = list(map(lambda x:x.replace('a','am'),old))
pm = list(map(lambda x:x.replace('p','pm'),am))
times = [i.strip() for i in pm];times = [i.split('-') for i in times]
['6:00-11:00',
'19:00-23:00',
'9:00-16:00',
'9:00-16:00',
'10:00-16:00',
'10:00-15:00']