给定ISO 8601持续时间字符串,如何将其转换为datetime.timedelta?
这不起作用:
timedelta("PT1H5M26S", "T%H%M%S")
Run Code Online (Sandbox Code Playgroud) 是否有可能将字符串表示的频率(如"30T"(30分钟)"2S"(2秒))转换为可以与timedelta进行比较的内容?
如果可能的话,我正在寻找熊猫内部的机制.使用编码机制的所有可能的字符串转换等,这些不会是强劲的.
我知道使用timedelta函数你可以使用类似的东西将秒转换为h:m:s:
>> import datetime
>> str(datetime.timedelta(seconds=666))
'0:11:06'
Run Code Online (Sandbox Code Playgroud)
但我需要将h:m:s转换为秒或分钟.
你知道一个可以做到这一点的功能吗?
我有一个像下面这样的持续时间列表
['5d', '20h', '1h', '7m', '14d', '1m']
Run Code Online (Sandbox Code Playgroud)
其中d代表天,h代表小时,m代表分钟。
我想从这个列表中获得最长的持续时间(14d在这种情况下)。我怎样才能从这个字符串列表中得到它?
Dateutil的timedelta对象似乎有一个自定义__str__方法:
In [1]: from datetime import timedelta
In [2]: td = timedelta(hours=2)
In [3]: str(td)
Out[3]: '2:00:00'
Run Code Online (Sandbox Code Playgroud)
我想做的是timedelta从字符串表示中重新创建一个对象.然而,据我所知,该datetime.parser.parse方法将始终返回一个datetime.datetime对象(参见https://dateutil.readthedocs.io/en/stable/parser.html):
In [4]: import dateutil.parser
In [5]: dateutil.parser.parse(str(td))
Out[5]: datetime.datetime(2016, 11, 25, 2, 0)
Run Code Online (Sandbox Code Playgroud)
我现在看到的唯一方法就是将转换时间值转换为天,小时和分钟,"破坏一些令人作呕的简单(但冗长)数学"以获得秒,分,小时等,并将这些传递__init__给新的timedelta.或者是否有更简单的方法?
我是python的新手,只是写了这个模块级函数:
def _interval(patt):
""" Converts a string pattern of the form '1y 42d 14h56m'
to a timedelta object.
y - years (365 days), M - months (30 days), w - weeks, d - days,
h - hours, m - minutes, s - seconds"""
m = _re.findall(r'([+-]?\d*(?:\.\d+)?)([yMwdhms])', patt)
args = {'weeks': 0.0,
'days': 0.0,
'hours': 0.0,
'minutes': 0.0,
'seconds': 0.0}
for (n,q) in m:
if q=='y':
args['days'] += float(n)*365
elif q=='M':
args['days'] += float(n)*30
elif q=='w':
args['weeks'] += float(n)
elif q=='d': …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何从简单的字符串构造timedelta对象
我有一个格式的字符串,hours:minutes:seconds但它不是一天中的时间而是持续时间.例如,100:00:00手段100 hours.
我试图找到从当前时间偏移字符串中指定的时间的时间.我可以使用正则表达式手动拉开时间字符串并将其转换为秒并将其添加到返回的浮点数time.time(),但是有一个time函数来执行此操作吗?
该time.strptime()函数的格式似乎一天/日期字符串,而不是任意的字符串的时间工作.