我正在尝试使用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行显示错误。时区数据库不同,这是因为您正在获取解析异常。

10-07 12:09
查看更多