2012-07-31 49 views
2

我正在使用桌面应用程序。这会得到输入作为从具有用户内容的文本文件是这样的:Java在运行时设置时区

.................................. 
.................................. 

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

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

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

它没有工作。任何人都可以请告诉我如何更改Java中的默认时区,当我有像MDT,CDT等时区的缩写... ...

回答

0

谢谢你们。感谢您的快速回复。 @vikas你的回应证明更有用。我使用下面的代码,它运行良好。

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时区测试了代码,它工作得很好。谢谢!

1

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

+0

我试图与下面的代码 日历日历=新的GregorianCalendar(); calendar.setTimeZone(TimeZone.getTimeZone(fileTimeZone)); 但没有奏效。 – dirtyhandsphp 2012-07-31 11:41:56

3

Theres没有时区叫做MDT,它是MST7MDT。用途:

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

另见Java's java.util.TimeZone

+0

工作对我来说,当你设置时区的所有日期,日历实例自动重新计算时区 – deFreitas 2016-09-22 17:09:29

3

MDT没有时区键,它是时区的简短显示名称,所以TimeZone.getTimeZone(“MDT”)将返回这是GMT的默认时区。 Mountain Time的关键是MST,MST7MDT等。因此,您需要确定时区的关键。请注意,对于相同的短显示名称,有许多不同的键,例如对于MDT shortName,有US/Mountain,美国/亚利桑那州,SystemV/MST7MDT,纳瓦霍,墨西哥/ BajaSur,MST7MDT和MST的密钥。

+0

你是对的。它现在将我的默认时区返回为GMT。 – dirtyhandsphp 2012-07-31 11:42:55

+0

谢谢兄弟....你的提示解决了我的问题。 – dirtyhandsphp 2012-07-31 11:58:58