Java 使用区域/城市解析Joda时区

Java 使用区域/城市解析Joda时区,java,timezone,jodatime,date-parsing,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(

我希望这能解析哥本哈根时区中的日期,但它在以下方面失败:

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")
        );
    }
}
为什么?

查看for
DateTimeFormat
您应该使用
ZZZ
而不是
Z


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

我正在使用的解决方案,目前为止似乎有效的是:

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)

仅在Joda time v2.0中添加了对Europe/Copenhagen等时区id的解析,因为文档中说:zone:'Z'输出不带冒号的偏移量,'ZZ'输出带冒号的偏移量,'ZZZ'或更多输出区域id。尝试ZZZ仍然会为我引发相同的异常:“线程中的异常”main“java.lang.IllegalArgumentException:无效格式:“19:30 29 8 11 Europe/Copenhagen”在“Europe/Copenhagen”Hrmm处格式不正确。我在链接的文档中看到,“区域名称:时区名称('z')无法解析。,那么也许Joda只能输出区域而不能解析它?看起来您必须自己对字符串进行一些预处理。这是可能的,但一年前还没有得到支持。我想这是你能得到的最接近的结果。您可以编写正则表达式来解析时区,
/.*?\/.*/。然后将其输入到
DateTimeZone.forId(strId)
中进行验证。最后,像上面那样调用格式的其余部分,再加上附加的
withZone
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")
    );
}