我有包含时间数据但整数类型的数据,并且整数之间没有分隔。 我的数据= [91310,101012,...]实际上应该是[“ 9:13:10”,“ 10:10:12”]
如何将其转换为时间格式
答案 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]