python - 在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
。由于我被要求提供一个简明的问题,所以我推进了我的逻辑,但是请你帮帮我吗?
解决方案
你做得很好,但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
将创建直接具有days
和seconds
属性的对象:
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']
推荐阅读
- python - Pandas concat 数据框行似乎索引
- node.js - 你如何创建 node-soap wsdl 文件?
- scala - 如何使用maven pom.xml中的application.conf文件进行flyway配置
- html - CSS 样式框垂直在 Mozilla Firefox 中不起作用
- node.js - 节点 webpack 构建完成,但文件在 heroku 部署上返回 404
- jpa - 尝试将 VARCHAR ' 缩小到长度 1000 时遇到截断错误
- javascript - AngularJS:如果只按下输入键
- dart - Dart 版本 2.0.0-dev.64.1 不兼容快照
- mongodb - 将 MongoDB 聚合中的匹配和查找与布尔值 OR 相结合
- php - 带有“!”的文件名 preg_match 错过了“$”