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")
);
}
}
为什么?查看forDateTimeFormat
您应该使用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")
);
}