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)
为什么?
查看DateTimeFormat
的JodaTime DateTimeFormat javadocs,您应该使用ZZZ
而不是Z
。
这很容易被忽略,因为那个文档中的表只显示Z。页面向下一点是这样的,"Zone: 'Z'输出不带冒号的偏移量,'ZZ'输出带冒号的偏移量,'ZZZ'或更多输出区域id。"
解析时区id,如Europe/Copenhagen仅在Joda-Time v2.0中添加
我正在使用的解决方案,到目前为止似乎是有效的是:
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")
);
}