3
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)

为什么?

4

3 回答 3

3

查看JodaTime DateTimeFormat javadocs for DateTimeFormat you should use ZZZnot Z

由于该文档中的表格仅显示 Z,因此很容易错过。在页面下方是这样的,“区域:'Z' 输出不带冒号的偏移量,'ZZ' 输出带冒号的偏移量,'ZZZ' 或更多输出区域 ID。”

于 2011-08-07T21:47:04.240 回答
2

仅在 Joda-Time v2.0 中添加了对欧洲/哥本哈根等时区 ID 的解析

于 2011-08-08T12:05:49.880 回答
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")
    );
}
于 2011-08-08T11:56:26.187 回答