Python 中的自然时间间隔处理

Natural time interval processing in Python

我想知道如何获取用户输入的字符串(即 1 day, 5 hours, 15 minutes, 2 seconds)并将其转换为 timedelta 对象或(最好)该间隔中的秒数。

注意:

谢谢!

谢谢@y0prst for

这里是,转换为程序:

import re, datetime
def get_seconds(text):
    splitted_input = filter(None, re.split('[, ]', text))
    assert len(splitted_input) % 2 == 0
    grouped_input = zip(*(iter(splitted_input),) * 2)
    # ⬆︎ This is tricky; see 
    kwargs = {
        'year':0,
        'month':0,
        'day':0,
        'hour':0,
        'minute':0,
        'second':0,
        'microsecond':0,
    }
    for n, unit in grouped_input:
        n = int(n)
        if unit.startswith('y'):
            kwargs['year'] += n
        elif unit.startswith('mo'):
            kwargs['month'] += n
        elif unit.startswith('w'):
            kwargs['day'] += 7*n
        elif unit.startswith('d'):
            kwargs['day'] += n
        elif unit.startswith('h'):
            kwargs['hour'] += n
        elif unit.startswith('m'):
            kwargs['minute'] += n
        elif unit.startswith('s'):
            kwargs['second'] += n
        else:
            assert False, unit
    for k, v in kwargs:
        kwargs[k] += getattr(now, k)
    now = datetime.datetime.now()
    return (datetime.datetime(**kwargs) - now).total_seconds()

你可以使用 parsedatetime module:

#!/usr/bin/env python
from datetime import date, datetime
import parsedatetime as pdt # $ pip install parsedatetime

cal = pdt.Calendar()
midnight = datetime.fromordinal(date.today().toordinal())
for s in "1 day, 5 hours, 15 minutes, 2 seconds".split(', '):
    print(repr(cal.parseDT(s, midnight)[0] - midnight))

输出

datetime.timedelta(1)
datetime.timedelta(0, 18000)
datetime.timedelta(0, 900)
datetime.timedelta(0, 2)

要获取秒数,请调用 .total_seconds() 或者如果您不需要几分之一秒;你可以截断它:

integer_seconds = td // timedelta(seconds=1)