Java在运行时设置时区

时间:2012-07-31 11:22:29

标签: java netbeans-7

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:3)

Theres没有名为MDT的时区,它是MST7MDT。使用:

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

另见Java's java.util.TimeZone

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

答案 3 :(得分: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));
} 

虽然有超过一个条目用于&#34; MDT&#34;时区,但它解决了我的问题,在第一场比赛本身没有任何问题。我已经测试了CDT,MDT和CDT时区的代码,它运行得非常好。谢谢伙计!!!