首页 > 解决方案 > 在python中将时间间隔字符串转换为时间

问题描述

我有以下字符串列表:

my_list = ['10:00AM-12:00PM','12:30PM-03:00PM']

我想将这些字符串转换为时间间隔(格式为 hh:mm 的时间差),在这种情况下:

intervals = [02:00,01:30]

我试过这个:

import time

le_vals = []
for i, val in enumerate(intervals):
   le_vals.append(val.replace('-', ' ').split(' '))

the_diff = []
for i, val in enumerate(le_vals):
   the_diff.append((time.strptime(val[1], '%I:%M%p') - time.strptime(val[0], '%I:%M%p'))

但我坚持最后一部分如何获得列表中的差异the_diff。由于我被要求提供一个简明的问题,所以我推进了我的逻辑,但是请你帮帮我吗?

标签: pythondatetime

解决方案


你做得很好,但intervals列表中的项目在 python 中无效!(您需要字符串?)为什么不将它们存储为timedelta对象?

from datetime import datetime

my_list = ['10:00AM-12:00PM', '12:30PM-03:00PM']

res = []
for item in my_list:
    d1, d2 = item.split('-')

    d1 = datetime.strptime(d1, '%I:%M%p')
    d2 = datetime.strptime(d2, '%I:%M%p')
    res.append(d2 - d1)

print(res)

输出 :

[datetime.timedelta(seconds=7200), datetime.timedelta(seconds=9000)]

当您将两个datetime对象相减时,timedelta将创建直接具有daysseconds属性的对象:

for i in res:
    print(i.days, i.seconds)

输出:

0 7200
0 9000

如果您需要有问题的字符串表示,请str()timedelta对象上使用(它也显示秒,但没有零填充小时):

res = []
for item in my_list:
    d1, d2 = item.split('-')

    d1 = datetime.strptime(d1, '%I:%M%p')
    d2 = datetime.strptime(d2, '%I:%M%p')
    res.append(str(d2 - d1))  # <--------------- Here

print(res)

输出 :

['2:00:00', '2:30:00']

或者自己构建它以获得确切的期望结果,这是一个完整的代码:

从日期时间导入日期时间

my_list = ['10:00AM-12:00PM', '12:30PM-03:00PM']

res = []
for item in my_list:
    d1, d2 = item.split('-')

    d1 = datetime.strptime(d1, '%I:%M%p')
    d2 = datetime.strptime(d2, '%I:%M%p')
    delta = d2 - d1

    m, s = divmod(delta.seconds, 60)
    h, m = divmod(m, 60)

    res.append(f'{h:02}:{m:02}')

print(res)

输出:

['02:00', '02:30']

推荐阅读