【问题标题】:Date parsing gone wrong日期解析出错
【发布时间】:2015-11-20 13:48:37
【问题描述】:

使用一个应用程序保存特定课程的日期,即创建的每门课程的结束日期。

此服务接受 MM/dd/yyyy 格式的日期。

例如,

course = {
    "courseName": "My Course",
    "endDate": "01/10/2015"
}

在服务中应将其解析为“01/10/2015”,即“2015 年 1 月 10 日”。

但是,在某些情况下,收到的日期格式错误,即 dd/MM/yyyy

course = {
    "courseName": "My Course",
    "endDate": "13/01/2015"
}

解析为“01/01/2016”,即“2016 年 1 月 1 日”。

上面的解析是使用

String d = "13/01/2015";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
Date date = format.parse(d);

我的问题是,有没有办法通过反转错误解析的日期来恢复原始日期?

我尝试使用模式“dd/MM/yyyy”解析它,但得到的是“01/01/2016”。

【问题讨论】:

  • 通过反转什么? DateFormat 可以双向使用,但是如果您将日期错误地解析为 1 月 1 日,则除非您仍然拥有被错误解析的原始字符串,否则您将无法将其转换为应有的日期。
  • “01/10/2015”即“2015 年 1 月 1 日”您是指 2015 年 1 月 10 日还是 2015 年 10 月 1 日?
  • “01/10/2015”即“2015 年 1 月 10 日”。我的错。我已经编辑了问题。
  • @khelwood 是对的。如果您不再拥有您的字符串,您将无法在转换后恢复原始日期。您需要先检测 endDate 的格式是否正确。

标签: java date datetime


【解决方案1】:

问题是,一旦您获得解析值“01/01/2016”,您如何知道原始值实际上是“01/01/2016”还是您不正确的“13/01/2015”。你没有。

我只能建议您将来参考setLenient(false),然后SimpleDateFormat 在遇到此类情况时会抛出适当的ParseException

String d = "13/01/2015";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
format.setLenient(false)
Date date = format.parse(d); // throws ParseException

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2017-02-06
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多