Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-将时间格式12:00a转换为24小时_Python_Arrays_Datetime_Time - Fatal编程技术网

Python-将时间格式12:00a转换为24小时

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(

我在一个数组中存储了大量时间,需要将其转换为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(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']