2

我正在开发一个桌面应用程序。它将从具有以下内容的用户那里以文本文件的形式获取输入:

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

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

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

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

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

4

4 回答 4

3

没有时区MDT,它是 MST7MDT。采用:

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

另请参阅Java 的 java.util.TimeZone

于 2012-07-31T11:37:14.443 回答
3

MDT 不是时区键,它是时区的短显示名称,因此 TimeZone.getTimeZone("MDT") 将返回默认时区,即 GMT。Mountain Time 的键是 MST、MST7MDT 等。因此,您需要识别时区的键。请注意,对于相同的短显示名称,有许多不同的键,例如,对于 MDT 短名称,有带有 US/Mountain、US/Arizona、SystemV/MST7MDT、Navajo、Mexico/BajaSur、MST7MDT 和 MST 的键。

于 2012-07-31T11:40:10.407 回答
1

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

于 2012-07-31T11:26:27.560 回答
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 时区测试过代码,它运行得非常好。谢谢各位!!!

于 2012-07-31T11:58:06.397 回答