【发布时间】:2014-01-29 18:55:28
【问题描述】:
我正在尝试使用 Joda 库的 DateTimeFormatter 从字符串中解析 DateTime 对象。由于某种原因,它在到达要解析的时区时抛出异常。
这是我的代码:
protected static final String DEFAULT_TIMEZONE = "America/Denver";
// Parse the date for the note
DateTimeFormatter dtFormatter = DateTimeFormat.forPattern("MM/dd/yyyy hh:mm a ZZZ");
String dateStr = defaultMonth + "/15/" + defaultYear + " 12:00 am " + DateTimeZone.forID(DEFAULT_TIMEZONE);
try {
DateTime noteDate = dtFormatter.parseDateTime(dateStr);
} catch(Exception e) {
e.printStackTrace();
}
堆栈跟踪:
java.lang.IllegalArgumentException:无效格式:“11/15/2014 12:00 am America/Denver”在“America/Denver”格式错误 在 org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:683) 在 com.happyjacksoftware.emr.actions.AddreportnotesController.create(AddreportnotesController.java:56) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597)
我实际上并没有将任何时间作为输入,所以我尝试了模式字符串"MM/dd/yyyy ZZZ",但这不起作用,我想也许 DateTime 对象需要一个时间来实例化。然而,添加时间并没有奏效。
注意:我确实尝试过使用模式字符串 "MM/dd/yyyy hh:mm a Z" 和字符串 11/15/2014 12:00 am -0700 并且它有效,但是获取数字偏移量对我来说不太方便,所以我希望有使用时区 ID 的解决方案。
【问题讨论】:
-
DateTime noteDate = dtFormatter.parseDateTime("11/15/2014 12:00 am America/Denver");适合我。你能尝试运行那行特定的代码吗? -
嗯,是的,即使尝试使用您在上面发布的“硬编码”字符串进行解析仍然会产生相同的异常消息:
java.lang.IllegalArgumentException: Invalid format: "11/15/2014 12:00 am America/Denver" is malformed at "America/Denver".我清理了服务器,认为可能 Joda 库出了问题,但它没有帮助。 -
@PopoFibo - 是的 ZZZ 表示 ZoneID
-
@JakubK 是的,只是确认 OP 保持一致。
标签: java date datetime jodatime date-formatting