当前位置: 首页 > 知识库问答 >
问题:

解析字符串到日期-Java

何安宜
2023-03-14

这就是问题所在:

我有一些带有旅行信息的. csv文件,日期显示为字符串(每一行代表一次旅行):

  • “1-5月和10-12月的所有星期一。6-9月的所有日子”

我必须将字符串解析为日期,并为每次旅行将其保存到一个数组中。

问题是我不知道怎么做。甚至我的大学老师也告诉我,他们不知道如何做到这一点:S。我无法使用http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

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

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

共有2个答案

岳华灿
2023-03-14

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

有关自然语言处理的更多理论背景,您可能对斯坦福大学Coursera上的自然语言处理课程感兴趣(目前该课程尚未开放,但免费提供讲座)。

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

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

蒋岳
2023-03-14

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

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

如果你控制了这门语言(也就是说,这些是由遵守你留档的人生成的),那么你就有机会将它正式化(尽管这需要很多工作——几个月)。如果你不负责它,那么每次出现一个新短语,你都必须将它添加到规范中。

我建议你浏览一下这个文件,查找常用短语“所有[工作日名称]s[从|到|之前]”。或“在[1月| 2月…]”。然后用短语替换这些。如果你发现这涵盖了所有的情况,你可能能够提取特定的短语”。但如果你有像“下周二”这样的回指,那就难多了。

 类似资料:
  • 问题内容: 我要解析的字符串: 周日2013年11月10日10:00:00 我的代码: 编译器错误输出: java.text.ParseException:无法解析的日期:java.text.DateFormat.parse(Unknown Source)的“ Sun Nov 10 10:00:00 CET 2013”​​ … 问题答案: 可能您缺少正确的语言环境。在您的示例中尝试以下操作:

  • 问题内容: 我在这里有点迷路,我认为我一切都很好,但仍然无法正常工作(PaseException 帮助高度赞赏! 问题答案: 对我来说很好。 也许你可以尝试

  • 问题内容: 我的日期格式为“ yyyy-MM-dd’T’HH:mm:ss.sssZ”。例如,日期为“ 2018-07-17T09:59:51.312Z”。我正在使用下面的代码来解析Java中的String。 这给了我“无法解析的日期:”例外。谁能告诉我该怎么做? 问题答案: 您忘了在 那会做的工作

  • 问题内容: 在Android应用程序中,我试图从字符串中解析日期,以发现两次之间的差异。 因此,我必须进行解析,以便获得格式,因此 但是我到了 所以我在做什么错了?如何在这里解析? 问题答案: 您需要将第二个MM(月)更改为mm(分钟):

  • 问题内容: 我试图解析一个日期字符串,它是FTP服务器上文件的修改日期。以下是代码。 我在日志中得到这个 谁能帮我这个忙吗? 问题答案: String#substring(int index) 方法的javadoc 说: 子字符串以指定索引处的字符开头,并扩展到该字符串的末尾。 这就是您遇到的问题:您没有正确使用该方法,因为调用该方法时,您会收到另一个,该字符包含一个空格作为第一个字符,这就是解析

  • 问题内容: 我正在尝试解析 2017-01-23T10:12:31.484Z 使用提供的本机类,但总是失败。如果字符串不包含毫秒,则创建对象不会出现问题。 我已经尝试过很多组合,但总是失败… 任何想法?谢谢! 问题答案: macOS 10.13之前的版本/ iOS 11 不支持包括毫秒在内的日期字符串。 一种解决方法是使用正则表达式删除毫秒部分。 在macOS 10.13 + / iOS 11+中