【问题标题】:Parsing String to Dates - Java将字符串解析为日期 - Java
【发布时间】:2013-06-05 06:01:12
【问题描述】:

这就是问题所在:

我有一些包含旅行信息的 .csv 文件,日期看起来像字符串(每行代表一次旅行):

  • “1 月至 5 月和 10 月至 12 月的所有星期一。6 月至 9 月的所有日子”
  • “2 月至 6 月的所有星期五”
  • “1 月 10 日至 4 月 30 日的周一、周五、周六和周日”
  • “从 11 月 1 日至 4 月 30 日。除 11 月 2 日至 24 日的星期五和 12 月 2 日至 30 日的星期日以外的所有日子”
  • “12 月 2 日至 4 月 28 日的所有星期日”
  • “3 月 5 日、12 日、20 日、4 月 11 日、18 日、5 月 2 日、16 日、30 日、6 月 6 日、13 日、27 日”
  • “2 月至 6 月以及 9 月至 12 月的所有星期六”
  • “12 月 1 日至 17 日,1 月 1 日至 31 日”
  • “2 月至 11 月的所有星期一”

我必须将字符串解析为日期,并将它们保存在每次旅行的数组中。

问题是我不知道该怎么做。甚至我的大学老师也告诉我他们不知道该怎么做:S。我无法使用http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html 找到/创建模式

解析它们后,我必须搜索两个日期之间的所有旅行。

但是怎么做呢?如何解析它们?有可能吗?

【问题讨论】:

    标签: java date string-parsing


    【解决方案1】:

    这需要自然语言处理 (NLP) ,请参阅 Wikipedia 以获取帐户: http://en.wikipedia.org/wiki/Natural_language_processing.

    您所说的问题非常困难。表示单个日期的方法有很多种,您的示例包括日期范围和生成日期的公式。听起来好像您只有有限的语言子集 - 经常使用“all”、“from”等。

    如果您可以控制语言(即这些语言是由遵守您的文档的人生成的),那么您就有机会将其正式化(尽管这需要大量工作 - 几个月)。如果您不负责,那么每次出现新短语时,您都必须将其添加到规范中。

    我建议您浏览文件并查找常用短语“所有 [weekdayname]s [from | between | until | before]”。或“在 [一月 | 二月 ...]”。然后用短语替换这些。如果您发现这涵盖了所有情况,您可能能够提取特定的短语”。但如果您有像“下周二”这样的回指,那就更难了。

    【讨论】:

      【解决方案2】:

      您处于 NLP(自然语言处理)领域,在这个领域中什么是可能或不可能是模糊的。通过快速的 Google 搜索,我发现Natty Date Parser 可能对您有用。

      想了解更多关于 NLP 的理论背景,您可能对 Coursera 上斯坦福大学的 Natural Language Processing 课程感兴趣(目前该课程不开放注册,但讲座免费提供。

      您还可以使用一组严格的正则表达式,只匹配您的一个可能的情况,并将它们从最严格到最宽松的情况下应用。

      我要解决您的问题的第一件事是您期望作为方法的输出,因为在某些情况下它是单个日期,在某些情况下是间隔,在其他情况下是多个间隔。

      【讨论】:

        猜你喜欢
        • 2012-10-21
        • 1970-01-01
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-21
        • 1970-01-01
        相关资源
        最近更新 更多