Joda DateTimeFormatter设置时区时抛出异常:“格式错误”

时间:2014-01-10 17:18:34

标签: java date datetime jodatime date-formatting

我正在尝试使用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的解决方案。

1 个答案:

答案 0 :(得分:4)

我已经在JodaTime 2.1 - 2.3上检查了你的代码并且它正常工作。我认为你使用的是一些可能以不同方式运行的旧版本。在当前版本的Joda中,parseDateTime方法从第841行开始,你的stacktrace在第683行显示错误。时区数据库不同,那是因为你得到了解析异常。