将相对日期字符串转换为绝对日期

时间:2011-01-06 13:14:22

标签: python string datetime date

作为输入,我有一个日期字符串,可以采用三种通用格式:

a)2011年1月6日 b)4天前 c)12小时前

我希望脚本能够识别格式并使用参数调用适当的函数。

那么如果当时是convert_full_string(“2011年1月6日”)

如果b然后是convert_days(4)

if c then convert_hours(12)

一旦我识别出格式并且能够调用适当的函数,它就会相对容易。我打算使用dateutil

但我不确定如何识别格式。

对代码示例的任何建议都非常感激。

3 个答案:

答案 0 :(得分:12)

使用parsedatetime,您可以将所有三种日期格式解析为datetime.datetime个对象,而无需自行编写逻辑代码:

import parsedatetime.parsedatetime as pdt
import parsedatetime.parsedatetime_consts as pdc
import datetime
c = pdc.Constants()
p = pdt.Calendar(c)
for text in ('january 6, 2011', '4 days ago', '12 hours ago'):
    date=datetime.datetime(*p.parse(text)[0][:6])
    # print(date.isoformat())
    # 2011-01-06T09:00:18
    # 2011-01-02T09:00:18
    # 2011-01-05T21:00:18
    print(date.strftime('%Y%m%dT%H%M%S'))
    # 20110106T090208
    # 20110102T090208
    # 20110105T210208

答案 1 :(得分:0)

您可以匹配正则表达式:

import re
re.search(r".* [0-9]{1,2}, [0-9]{4}", tomatch)

[0-9]{1,2}天前相似,等等。

答案 2 :(得分:0)

if 'days' in userinput: 
    convert_days(userinput[:userinput.index('days')].strip())
elif 'hours' in userinput:
    convert_hours(userinput[:userinput.index('hours')].strip())
else:
    convert_full_string(userinput)

这假设当userinput中包含“days”或“hours”时,您总是希望紧接在这两个单词之前出现的字符。