如何将中间体转换为时间,而中间体实际上是时间数据但没有分离



我有包含时间数据的数据,但为整数类型,并且整数之间没有分隔。我的数据如 = [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]

最新更新