Joda时区时区解析与地区/城市

时间:2011-08-07 14:31:19

标签: java timezone jodatime date-parsing

import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        System.out.println(
                DateTimeZone.forID("Europe/Copenhagen")
        );

        DateTimeFormatter formatter = DateTimeFormat.forPattern("HH:mm dd MM YY Z");
        System.out.println(
                formatter.parseDateTime("19:30 29 8 11 Europe/Copenhagen")
        );
    }
}

我希望这能解析哥本哈根时区的日期,但它失败了:

Europe/Copenhagen
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "19:30 29 8 11 Europe/Copenhagen" is malformed at "Europe/Copenhagen"
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:683)
    at Main.main(Main.java:13)

为什么?

3 个答案:

答案 0 :(得分:3)

查看DateTimeFormat的{​​{3}},您应使用ZZZ而不是Z

很容易错过,因为该文档中的表只显示Z.在页面下方有点是这样,“区域:'Z'输出没有冒号的偏移量,'ZZ'用冒号输出偏移量'ZZZ'或更多输出区域ID。“

答案 1 :(得分:2)

仅在Joda-Time v2.0中添加了像Europe / Copenhagen这样的时区ID的解析

答案 2 :(得分:1)

我正在使用的解决方案似乎目前正在使用:

public static void main(String[] args) {
    DateTimeFormatter formatterC = DateTimeFormat.forPattern("HH:mm dd M YY").withZone(DateTimeZone.forID("Europe/Copenhagen"));
    System.out.println(
        formatterC.parseDateTime("19:30 29 8 11")
    );
}