Scala joda时间ISO日期时间格式

Scala joda时间ISO日期时间格式,scala,datetime,jodatime,isodate,Scala,Datetime,Jodatime,Isodate,我正在使用joda time设置ISO日期输入字符串的格式,但我遇到一个异常,我的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 = fo

我正在使用joda time设置ISO日期输入字符串的格式,但我遇到一个异常,我的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")

这里出了什么问题?

错误注释在这里有点误导,因为您从
ISODateTimeFormat
派生的Joda格式化程序期望出现日期/时间字符串的毫秒部分,因此以下操作可以正常工作:

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

内置ISO 8601格式 但是,您根本不需要指定格式化程序。该类有一个用于兼容格式的内置解析器,由自动使用

虽然第二个参数是可选的,但如果您知道这样一个时区,我建议您为DateTime分配一个对象。输入字符串与UTC之间有偏移,但时区不仅仅是偏移。时区包括规则和其他异常。切勿使用3个或4个字母的代码,如
EST
IST

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

  • 内置
  • 内置(短、中、长和完整格式,-敏感)
例如,如果在字符串表示中只需要日期部分而不需要时间,请调用以访问内置格式设置程序

Joda Time 2.8中的示例代码

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

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

数据格式字符串为“yyyyMMdd'HHmmss.SSSZ”。因此,在秒和时区之间需要一个点(“.”)和三位数字。这三位数字是必需的,代表毫秒。谢谢你的回答。有没有办法使用joda datetime精确打印此格式?datetime的
toString
方法默认使用相同的内置格式设置程序<代码>字符串输出=dateTime.toString()如果希望以其他格式生成字符串,请浏览
DateTimeFormat
类,包括
forPattern
forStyle
方法和ISODateTimeFormat子类。
String output = ISODateTimeFormat.date().print( dateTime );  // Format: yyyy-MM-dd