Java在运行时设置时区

我正在研究桌面应用程序。 它将从具有以下内容的用户的文本文件中输入:

.................................. .................................. Mon Jul 9 14:41:07 MDT 2012 .................................. .................................. .................................. 

我正在使用此信息并使用jfreechart库创建时间序列图表。 时区可以是世界上任何可用的东西。 但是当我使用这个文件时,它的默认时区是sytem的时区(IST),所以不显示MDT时间。 当我试图从日期捕获时区然后使用

 TimeZone.setDefault(TimeZone.getTimeZone("MDT")); 

它没用。 当我使用MDT,CDT等时区缩写时,如何更改Java中的默认时区?

MDT不是时区密钥,它是时区的短显示名称,因此TimeZone.getTimeZone(“MDT”)将返回默认时区GMT。 山地时间的关键是MST,MST7MDT等。因此,您需要确定时区的关键。 请注意,相同的短显示名称有许多不同的键,例如MDT shortName,有US / Mountain,US / Arizona,SystemV / MST7MDT,Navajo,Mexico / BajaSur,MST7MDT和MST的键。

没有时区称为MDT ,它是MST7MDT。 使用:

 TimeZone.setDefault(TimeZone.getTimeZone("MST7MDT")); 

另请参阅Java的java.util.TimeZone

使用Calendar类中的setTimeZone(…)方法。

多谢你们。 感谢您的快速回复。 @vikas你的回答certificate更有用。 我正在使用以下代码,它运作良好。

 String timezoneLongName = ""; String fileTimeZone = "MDT"; //timezone could be anything, getting from file. Date date = new Date(); String TimeZoneIds[] = TimeZone.getAvailableIDs(); for (int i = 0; i < TimeZoneIds.length; i++) { TimeZone tz = TimeZone.getTimeZone(TimeZoneIds[i]); String tzName = tz.getDisplayName(tz.inDaylightTime(date),TimeZone.SHORT); if(fileTimeZone.equals(tzName)){ timezoneLongName = TimeZoneIds[i]; break; } } if(timezoneLongName != null && !timezoneLongName.isEmpty() && !timezoneLongName.trim().isEmpty() && timezoneLongName.length() != 0){ TimeZone.setDefault(TimeZone.getTimeZone(timezoneLongName)); } 

虽然“MDT”时区有多个条目,但它在第一次匹配时解决了我的问题而没有任何问题。 我已经测试了CDT,MDT和CDT时区的代码,它运行得非常好。谢谢伙计!