我正在尝试使用Joda库的DateTimeFormatter从String解析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”格格不入“美国/丹佛” at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:683) 在com.happyjacksoftware.emr.actions.AddreportnotesController.create(AddreportnotesController.java:56) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at 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的解决方案。
答案 0 :(得分:4)
我已经在JodaTime 2.1 - 2.3上检查了你的代码并且它正常工作。我认为你使用的是一些可能以不同方式运行的旧版本。在当前版本的Joda中,parseDateTime方法从第841行开始,你的stacktrace在第683行显示错误。时区数据库不同,那是因为你得到了解析异常。