2016-08-15 66 views
0

如何使用SimpleDateFormat解析“US/Mountain”,“US/Pacific”等等的时区?使用SimpleDateFormat.java解析时区

下面的代码抛出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库,甚至可以自己做一些有限的时区和字符串(ugh)。

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

回答

2

AFAIK,z指的是时区的“显示名称”。

你可以尝试使用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)); 
+0

它看起来像TimeZone.getTimeZone(“US /山”)返回“山地标准时间“有没有办法使用SimpleDateFormat解析”US/Mountain“? – Ervin

+0

@Ervin不太确定。但通过粗略阅读源代码。看来只有在区域标识未知的情况下才有可能。但是,代码本身确实使用显示名称作为格式的值。所以,我想你应该坚持显示名称。 –

-1

张贴作为一个答案我的评论: 我相信你有一个多余的“A”在你的模式))