我正在使用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")
这里有什么问题?
答案 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是正确的。
但是,您根本不需要指定格式化程序。 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,不要使用EST
或IST
等3或4个字母代码。
您可以应用许多其他格式:
例如,如果您只希望字符串表示中没有时间的日期部分,请调用ISODateTimeFormat.date()
以访问内置格式化程序。
Joda-Time 2.8中的示例代码。
String output = ISODateTimeFormat.date().print( dateTime ); // Format: yyyy-MM-dd
在StackOverflow中搜索有关格式化日期时间值的数百个其他问题和解答。