java - Joda DateTimeFormatter 设置时区时抛出异常 : "is malformed at"

标签 java date datetime jodatime date-formatting

我正在尝试使用 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: Invalid format: "11/15/2014 12:00 am America/Denver" is malformed at "America/Denver" at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:683) at 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) at 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 的解决方案。

最佳答案

我已经在 J​​odaTime 2.1 - 2.3 上检查了您的代码,它工作正常。我认为您使用了一些可以以不同方式运行的旧版本。在 Joda 的当前版本中,parseDateTime 方法从第 841 行开始,您的堆栈跟踪在第 683 行显示错误。时区数据库不同,这是因为您遇到了解析异常。

关于java - Joda DateTimeFormatter 设置时区时抛出异常 : "is malformed at",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050455/

相关文章:

java - 在 android studio 中编译应用程序时运行时错误

php - 在已知开始日期和工作日的情况下查找正在进行的事件的日历日期

sqlite - SQLite时间范围过滤器?

python - 将十进制时间戳转换为日期时间时如何保留微秒?

sql - 将 datediff 显示为秒、毫秒

java - JDBC MySQl 不显示结果集

java - 无法在片段(发布版本)中启动 RecyclerView,但在(调试版本)中工作完美

java - 交换内存不断增加

mysql - 如果我有过去的日期和我想要日期之后的月数,如何获得 future 的日期?

python - 日期时间模块中异常消息的来源。值错误: year 10000 is out of range