使用 SimpleDateFormat.java 解析时区

Parsing time zone with SimpleDateFormat.java

如何使用 SimpleDateFormat 从 "US/Mountain"、"US/Pacific"、...等中解析时区?

以下代码抛出 ParseException

String pattern = "MM/dd/yyyyy hh:mm a zzzz";
String value = "7/18/2016 05:00 PM US/Mountain";
new SimpleDateFormat(pattern).parse(value);

根据http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html#timezone

我应该能够使用 'z'(或多个 z)从文本中获取时区,但我不确定 SimpleDateFormat.java 正在查看的字符串或模式列表。

我知道我可以使用不同的 Java 库,甚至可以自己为一组有限的时区和字符串执行此操作(呃)。

但我的问题真的是关于正确使用或 SimpleDateFormat 来做到这一点?

据我所知,z 指的是时区的 "display name"。

您可以尝试使用 TimeZone.getTimeZone("US/Mountain") 然后使用方法 getDisplayName()

获取其显示名称

可能像这样就足够了。

TimeZone tz = TimeZone.getTimeZone("US/Mountain");
String pattern = "MM/dd/yyyyy hh:mm a zzzz";
String value = "7/18/2016 05:00 PM " + tz.getDisplayName();
System.out.println(new SimpleDateFormat(pattern).parse(value));

张贴我的评论作为答案: 我相信你的模式中有一个多余的 'a' ))