joda时间ISO DateTime格式

时间:2014-06-20 09:46:10

标签: scala datetime jodatime isodate

我正在使用joda时间来格式化我的ISO Date输入字符串,但我得到一个异常,即我的ISO日期格式错误:

Invalid format: "2014-06-20T11:41:08+02:00" is malformed at "+02:00"

这是我的代码:

val formatter: DateTimeFormatter = ISODateTimeFormat.dateTime.withZone(DateTimeZone.getDefault)
val date: DateTime = formatter.parseDateTime("2014-06-20T11:41:08+02:00")

这里有什么问题?

2 个答案:

答案 0 :(得分:6)

错误评论在这里有点误导,因为您从ISODateTimeFormat派生的Joda格式化程序期望日期/时间字符串的毫秒部分存在,因此以下内容将正常工作:

val formatter: DateTimeFormatter = ISODateTimeFormat.dateTime().withZone(DateTimeZone.getDefault())
val date: DateTime = formatter.parseDateTime("2014-06-20T11:41:08.0+02:00")

答案 1 :(得分:4)

answer by Radyk是正确的。

内置ISO 8601格式

但是,您根本不需要指定格式化程序。 DateTime类的ISO 8601符合格式的内置解析器,由constructor自动使用。

DateTime dateTime = new DateTime( "2014-06-20T11:41:08+02:00", timeZone );

虽然第二个参数是可选的,但如果您知道这样的时区,我建议您指定一个DateTimeZone对象分配给DateTime。输入字符串具有与UTC的偏移量,但时区不仅仅是偏移量。时区包括Daylight Saving Time和其他异常的规则。使用proper time zone names,不要使用ESTIST等3或4个字母代码。

其他格式

您可以应用许多其他格式:

例如,如果您只希望字符串表示中没有时间的日期部分,请调用ISODateTimeFormat.date()以访问内置格式化程序。

Joda-Time 2.8中的示例代码。

String output = ISODateTimeFormat.date().print( dateTime );  // Format: yyyy-MM-dd

在StackOverflow中搜索有关格式化日期时间值的数百个其他问题和解答。