我正在尝试使用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:无效格式:“ America / Denver”的“ 11/15/2014 12:00 am America / Denver”格式错误
在org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:683)
在com.happyjacksoftware.emr.actions.AddreportnotesController.create(AddreportnotesController.java:56)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在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的解决方案。 最佳答案
我已经在JodaTime 2.1-2.3上检查了您的代码,并且工作正常。我认为您使用的某些旧版本的行为可能有所不同。在当前版本的Joda中,parseDateTime方法从第841行开始,并且您的stacktrace在第683行显示错误。时区数据库不同,这是因为您正在获取解析异常。