【问题标题】:Java - Convert string to ISO 8601 date format error Joda-TimeJava - 将字符串转换为 ISO 8601 日期格式错误 Joda-Time
【发布时间】:2014-02-01 23:42:11
【问题描述】:

我正在尝试使用Joda-Time 将我的应用用户作为字符串输入的日期转换为ISO 8601 格式,因此我使用以下代码但出现错误:

String oldDate = "05/05/2013";
DateTime oldD = DateTime.parse(oldDate);
DateTimeFormatter OldDFmt = ISODateTimeFormat.dateTime();
String str = OldDFmt.print(oldD);
System.out.println(str);

但我总是收到错误:

org.springframework.web.util.NestedServletException: 请求 处理失败;嵌套异常是 java.lang.IllegalArgumentException:无效格式:“05/05/2013”​​是 在“/05/2013”​​格式错误

有人可以帮忙告诉我我在这里做错了什么吗?谢谢。

【问题讨论】:

  • 当读取这样的异常时,提示通常在消息中。解析“/05/2013”​​时出现问题,这是您的 oldDate 变量的一部分。

标签: java jodatime


【解决方案1】:

有人可以帮忙告诉我我在这里做错了什么吗?

错误发生在这里。

DateTime oldD = DateTime.parse(oldDate);

DateTime.parse(String) 方法使用 ISODateTimeFormat.dateTimeParser() 解析您的 String 参数。

format must be of the form

 datetime          = time | date-opt-time
 time              = 'T' time-element [offset]
 date-opt-time     = date-element ['T' [time-element] [offset]]
 date-element      = std-date-element | ord-date-element | week-date-element
 std-date-element  = yyyy ['-' MM ['-' dd]]
 ord-date-element  = yyyy ['-' DDD]
 week-date-element = xxxx '-W' ww ['-' e]
 time-element      = HH [minute-element] | [fraction]
 minute-element    = ':' mm [second-element] | [fraction]
 second-element    = ':' ss [fraction]
 fraction          = ('.' | ',') digit+
 offset            = 'Z' | (('+' | '-') HH [':' mm [':' ss [('.' | ',') SSS]]])

你的

String oldDate = "05/05/2013";

不是。

您需要使用具有相应格式的解析器来解析您的String 日期,就像Paul Hicks 所建议的那样。然后您可以将创建的DateTime 格式化为 ISO 标准格式。

【讨论】:

  • 好吧,我想做的是将这个不是 ISO 8601 格式的强转换为 ISO 8601 格式,这就是我使用 .dateTime 方法的原因,有意义吗?如果我的字符串已经是 ISO 8601 格式,为什么还要转换它?
  • @MChan A String 没有 ISO 8601 格式,但日期有。您可以从String 解析DateTime 并将DateTime 格式化为ISO 格式。解析为DateTime 对象的步骤必须使用非 ISO 8601 的其他格式。
  • @MChan 我误读了你的问题。看看Paul's 的回答和我的编辑。
  • @MChan 你得到MM/dd/yyyy 格式的日期。您需要以该格式对其进行解析以创建 DateTime 对象。然后就可以将生成的DateTime格式化成ISO格式了。
  • 是的。与 Sotirios 之前的评论相反,DateTimes 没有 有格式,它们只是一个时间点。只有输出格式化程序需要了解 ISO 日期格式。
【解决方案2】:

您用来解析字符串DateTime.parse(oldDate) 的格式化程序是默认格式化程序:根据javadocs,ISODateTimeFormat.dateTimeParser()。你想要一个解析DateTimeFormatter,它知道你的字符串格式dd/mm/yyyy。我不使用 joda-time,但我认为你想要这个:

DateTimeFormatter stringParser = DateTimeFormat.forPattern("dd/MM/yyyy");

其余代码看起来没问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多