2

我有许多具有不同日期格式的字符串。我希望能够从字符串中提取日期。例如:

  • 今天是 2012 年 8 月。明天不是
  • 另一天 8 月 12 日,另一个时间
  • 12/08 是另一种格式
  • 有另一种 ?2012 年 8 月 12 日可能是
  • 最后是 8 月 12 日

我希望从这些结果中得到的结果是 2012-08-01 00:00:00, 2013-08-12 00:00:00, 2013-08-12 00:00:00, 2012-08-12 00:00:00,2013 年 8 月 12 日 00:00:00。

我目前有这个代码:

from dateutil import parser
print parser.parse("Today is August 2012. Tomorrow isn't",fuzzy=True)

您将从这里看到日期打印为 2012-08-27 00:00:00(因为今天是每月 27 日)。在这个例子中我想要的是 2012-08-01 00:00:00。

如果没有给定一天,我如何强制它始终放置每月的第一天?(例如,如果我给 2012 年 8 月它应该返回 2012-08-01,如果我给它 2012 年 8 月 12 日它应该返回 2012-08-12。)

4

1 回答 1

4

使用default参数设置默认日期。这应该处理除了第三种情况之外的所有情况,这有点模棱两可,可能需要一些解析器调整或读心器:

In [15]: from datetime import datetime

In [16]: from dateutil import parser

In [17]: DEFAULT_DATE = datetime(2013,1,1)

In [18]: dates=["Today is August 2012. Tomorrow isn't",
    ...:        "Another day 12 August, another time",
    ...:        "12/08 is another format",
    ...:        "have another ? 08/12/12 could be", 
    ...:        "finally august 12 would be"]


In [19]: for date in dates:
    ...:     print parser.parse(date,fuzzy=True, default=DEFAULT_DATE)
    ...:     
2012-08-01 00:00:00
2013-08-12 00:00:00
2013-12-08 00:00:00  # wrong
2012-08-12 00:00:00
2013-08-12 00:00:00
于 2013-01-27T14:27:28.807 回答