解析字符串到日期 - Java

时间:2013-06-09 11:57:08

标签: java date string-parsing

这是问题所在:

我有一些包含旅行信息的.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日”
  • “5月12日,20日,4月11日,18日,2月16日,30日,5月6日,13日,27日”,
  • “所有星期六从2月到6月,从9月到12月”
  • “12月1日至17日,1月1日至31日”
  • “所有星期一从二月到十一月”

我必须将字符串解析为Dates,并将它们保存到每个旅行的数组中。

问题在于我不知道该怎么做。甚至我的不诚实的老师也告诉我他们不知道该怎么做:S。我无法使用http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

找到/创建模式

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

但是怎么样?如何解析它们?这可能吗?

2 个答案:

答案 0 :(得分:1)

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

有关NLP的更多理论背景,您可能对斯坦福大学课程的Natural Language Processing课程感兴趣(目前该课程尚未开放注册,但课程免费提供。

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

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

答案 1 :(得分:1)

这需要自然语言处理(NLP),请参阅维基百科的帐户: http://en.wikipedia.org/wiki/Natural_language_processing

你说的问题很难。有许多表示单个日期的方法,您的示例包括日期范围和生成日期的公式。听起来好像你有一个有限的语言子集 - 频繁使用“全部”,“从”等等。

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

我建议你通过该文件并查找库存短语“All [weekdayname] s [from | between | until | before]”。或者“在[1月| 2月......]”。然后用短语替换这些。如果你发现这涵盖了所有的情况,你可以提取特定的短语“。但如果你有像下周二那样的回指,那将会更加困难。