当整数实际上是时间数据但没有分隔时,如何将整数转换为时间

时间:2019-05-27 22:48:04

标签: python python-3.x

我有包含时间数据但整数类型的数据,并且整数之间没有分隔。 我的数据= [91310,101012,...]实际上应该是[“ 9:13:10”,“ 10:10:12”]

如何将其转换为时间格式

3 个答案:

答案 0 :(得分:0)

此方法不检查时间是否正确,即小时<24,分钟和秒数<60

a = [91310, 101012,94545]
def dd(x):
    n = str(x)
    return f'{n[:-4]}:{n[-4:-2]}:{n[-2:]}'
[dd(i)for i in a]
['9:13:10', '10:10:12', '9:45:45']

或使用正则表达式:

eval(re.sub(r'(\d{1,2})(\d{2})(\d{2})',r"'\1:\2:\3'",str(a)))
 ['9:13:10', '10:10:12', '9:45:45']

答案 1 :(得分:0)

使用5(或6)个前导零格式化数字,然后从字符串中提取2个字符切片:

[":".join(f"{n:05}."[-c:2-c] for c in [7,5,3]) for n in data]

# ['0:00:00', '0:00:05', '0:00:15', '0:02:35', '0:23:59', '1:35:46', '11:25:32']

如果您持续使用了一段时间,并且希望允许小时数超过24甚至是负数时间:

data = [112532,3333759,-120503,-1234]

[":".join(f"{n:0{5+(n<0)}}."[-s:-e] for s,e in [(0,5),(5,3),(3,1)]) for n in data]

# ['11:25:32', '333:37:59', '-12:05:03', '-0:12:34']

答案 2 :(得分:0)

您可以使用简单的数学运算从整数值中获取小时,分钟和秒。然后,您可以根据需要设置格式(将其格式化为带有适当冒号的字符串,或者转换为datetime.time对象之类的格式。)

import datetime

results = []
dt_results = []
for n in data:
    hours = n // 10000
    minutes = n // 100 % 100
    seconds = n % 100
    results.append(f'{hours:02}:{minutes:02}:{seconds:02}')
    dt_results.append(datetime.time(hour=hours, minute=minutes, second=seconds))

如果您不希望字符串结果中的小时数前导零,请从格式字符串中删除第一个:02。如果只想要其中一个结果,则可以很容易地将小时分和秒的计算内联到格式字符串或datetime.time调用中,然后将整个循环转换为列表理解:

results = [f'{n // 10000:02}:{n // 100 % 100:02}:{n % 100:02}' for n in data]