2

我正在实现一个自由​​文本搜索功能。用户可以输入任何关键字,例如日期字符串。

我希望它灵活:“2013 Oct”、“Oct 2013”​​、“2013-10”等都应该被识别。由于 App Engine 搜索 API 仅将日期格式识别为 YYYY-MM-DD,如果我得到“2013 Oct”,我需要将其翻译成“search_date >= 2013-10-01 and search_date <= 2013-10-31” .

我设法使用 dateutil.parser.parse(search_date_str),但问题是如果缺少任何日期组件,它将使用今天的数据。例如“2013 Oct”将被解析为“2013-10-27”。在这种情况下,我无法判断用户输入的是“2013 Oct 27”还是“2013 Oct 27”。按年份搜索相同...如果用户只想搜索“2013”​​,我应该能够将其翻译成 [2013-01-01, 2013-12-31] 而不是“2013-10-27”

我不确定我该怎么做?我在想是否需要任何正则表达式(我真的很穷……)

4

1 回答 1

1

看看内置的日期时间模块(http://docs.python.org/2/library/datetime.html),特别是datetime.strptime功能:(http://docs.python.org/2/library/datetime .html#strftime-strptime-行为)。datetime这允许您从具有各种不同格式的字符串创建对象。例如,您可以这样做:

theString = "2013-10"
theDate = datetime.strptime(theString, "%Y-%m")
theString2 = "2013 Oct"
theDate2 = datetime.strptime(theString, "%Y %b")

以及其他各种组合。如果您限制允许的输入格式会容易得多,但无论如何这应该让您的生活更轻松。您不需要编写任何正则表达式,因为datetime模块已经处理了这个。

于 2013-10-27T11:42:13.843 回答