我有一系列的时差,例如:
products(id, status, gender)
我希望将它们转换为绝对值,例如以秒为单位进行排序。是的,我可以编写自己的库,但我想知道是否已存在某些内容。
Google没有帮助,因为它的时间戳结果太多了。
答案 0 :(得分:4)
Python有&#34; timedelta&#34; datetime模块中的类 - 它无法解析上面的数量,但您可以通过一些最小的解析创建timedelta对象,这些对象可以直接比较(并且可以直接添加和减去正常日期或日期时间对象); < / p>
In [1]: from datetime import timedelta
In [5]: x = timedelta(weeks=40)
In [6]: x
Out[6]: datetime.timedelta(280)
timedelta可能需要几周,几年,几天和几秒作为关键字参数,但不是几个月,因为它们的长度没有明确定义。此外,创建timedelta的最常用方法是减去两个日期(或日期时间)对象。
这个小函数利用你使用的时间单位几乎相同,被接受为timedelta构造函数来保存一些行来解析你的英语时差并用它们创建一个timedelta对象,使用正则表达式:< / p>
import re
from datetime import timedelta
def get_timedelta(line):
timespaces = {"days": 0}
for timeunit in "year month week day hour minute second".split():
content = re.findall(r"([0-9]*?)\s*?" + timeunit, line)
if content:
timespaces[timeunit + "s"] = int(content[0])
timespaces["days"] += 30 * timespaces.pop("months", 0) + 365 * timespaces.pop("years", 0)
return timedelta(**timespaces)
使用您提供的示例,有一个:
In [26]: lines = """7 months
11 months
1 hour, 24 minutes
10 months, 3 weeks
1 year
1 year, 1 month
8 months, 2 weeks
2 months
2 months, 4 weeks
8 months, 1 week
9 months, 3 weeks""".split("\n")
In [27]: for line in lines:
print(get_timedelta(line))
....:
210 days, 0:00:00
330 days, 0:00:00
1:24:00
321 days, 0:00:00
365 days, 0:00:00
395 days, 0:00:00
254 days, 0:00:00
60 days, 0:00:00
88 days, 0:00:00
247 days, 0:00:00
291 days, 0:00:00