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はタイムゾーンキーではなく、タイムゾーンの短い表示名であるため、TimeZone.getTimeZone( "MDT")はデフォルトのタイムゾーンであるGMTを返します。Mountain Timeのキーは、MST、MST7MDTなどです。したがって、タイムゾーンのキーを特定する必要があります。同じ短い表示名には多くの異なるキーがあることに注意してください。たとえば、MDT shortNameには、US / Mountain、US / Arizona、SystemV / MST7MDT、Navajo、Mexico / BajaSur、MST7MDT、およびMSTのキーがあります。

于 2012-07-31T11:40:10.407 に答える
3

というタイムゾーンはありませんMDT。MST7MDT です。使用する:

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

Java の java.util.TimeZoneも参照してください。

于 2012-07-31T11:37:14.443 に答える
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 に答える