5

一部の Windows XP マシンで、「協定世界時」タイム ゾーンに関連する奇妙な問題が発生しています。すべての Windows XP マシンに搭載されているわけではありませんが、搭載されているマシンでは、次の単純な Java プログラム

public class TimeTest {
    public static void main(String[] args) {
        System.out.println(java.util.TimeZone.getDefault());
        System.out.println(new java.util.Date());
    }
}

JDK 1.6.0_06 では次のように出力されます。

sun.util.calendar.ZoneInfo[id="アメリカ/カラカス",offset=-16200000,dstSavings=0,useDaylight=false,transitions=5,lastRule=null]
金 11 月 13 日 05:34:14 VET 2009

(つまり、GMT から 4 時間半遅れています)。私はロンドンに拠点を置いており、南アメリカに行ったことがないことを付け加えておきます。:-)

私の質問は次のとおりです。

  • Javaはこのタイムゾーンをどこから取得しますか? GMT の新しい名前は協定世界時だと思っていました。
  • 一部の Windows マシンでこのタイム ゾーンが設定されているのに、他のマシンでは設定されていないのはなぜですか?
4

3 に答える 3

3

Windows が太平洋に設定されているにもかかわらず、Java がベネズエラ標準時 (VET) のタイム ゾーンを表示することを経験しました。これは、新しく複製された VMWare ボックス上にありました。タイム ゾーンを Pacific から別のものに変更して保存し、Pacific に戻して保存し、Java アプリケーションを再起動すると、Java は正しいタイム ゾーンを認識しました。

于 2012-09-06T22:18:17.103 に答える
0

Unix/Solarisでも同じ問題が発生しました。これらの「date-u042315232010」のようなコマンドの場合、dateコマンドはTime/Zome変数を使用します。パラメーター-uを使用する場合、コマンド日付はTZという名前の変数を使用し、それはTZの時刻に対してGMT時刻を調整するように処理されます。これらを解決するには、コマンド「日付042315232010」を使用し、すべてが機能しました。おそらく、JavaプログラムでTimeZoneセンテンスを避ける必要があります。ちなみに「date042315232010」は「FriApr2315:23:00VET2010」を意味します。

于 2010-04-23T20:10:07.993 に答える
0

デフォルトのタイムゾーンを使用して印刷しています。あなたの主題はUTCを「選択する」ことについて話していますが、あなたのプログラムにはそのような選択はありません。他の場所を選択した場合は、正確な場所を詳しく教えてください。XP のタイム ゾーンを変更した場合は、再起動してみてください。Java コードがどこかからキャッシュされた値を取得している可能性があります。

印刷するjava.util.TimeZone.getDefaultと、問題のあるマシンに VET が表示されると思います。

コードで UTC を使用する場合は、明示的に指定する必要があります...できれば組み込みの/クラスの代わりにJoda Timeを使用します。DateCalendar

編集: 同じマシンに .NET 3.5 がある場合は、次の小さなプログラムを試して、タイム ゾーンが何であるかを確認してください。

using System;

class Test
{
    static void Main()
    {
        Console.WriteLine(TimeZoneInfo.Local.DisplayName);
    }
}
于 2009-11-13T09:57:49.687 に答える