我有包含时间数据的数据,但为整数类型,并且整数之间没有分隔。我的数据如 = [91310, 101012, ...] 事实上,它应该是["9:13:10","10:10:12"]
如何将其转换为时间格式
用 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']
此方法不检查时间是否正确,即小时<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']
您可以使用简单的数学运算从整数值中获取小时、分钟和秒。然后,您可以随心所欲地格式化它们(可以是带有适当冒号的字符串,也可以是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]