【问题标题】:Parse a date from a complex string using python使用python从复杂字符串中解析日期
【发布时间】:2013-01-10 23:31:01
【问题描述】:

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

  • 今天是 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-08-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。)

【问题讨论】:

  • Hack:将日期设置为月初,调用解析器,设置日期...

标签: python string parsing date python-dateutil


【解决方案1】:

使用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

【讨论】:

  • 一个极好的答案根,非常感谢您花时间编辑答案以使其更加有用。
猜你喜欢
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多