これは、Java および Citrix XenApp の既知の問題のようです。IBM の Java ベースの Lotus Notes クライアントでさえ、この問題に悩まされています。残念ながら、どこにも解決策が見つかりませんでした。
タイム ゾーンを取得する非常に単純な C# プログラムを作成することで、この問題を回避することができました。これにより、クライアントのタイム ゾーンが正しく読み取られます。NodaTimeライブラリを使用して、Java がタイム ゾーンを識別するために使用するtz データベース形式で時刻を読み取りました。プログラムは次のとおりです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NodaTime;
namespace WindowsTimeZoneReader
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(DateTimeZone.GetSystemDefault() + "," + DateTime.Now);
}
}
}
Java プログラムから、Runtime.exec() を使用してこの C# プログラムを実行し、ここで説明する手法を使用して、このプログラムの出力を読み取ります。
これを取得したら、Java によって報告されたタイム ゾーンと C# プログラムによって報告されたタイム ゾーンを簡単に比較できます。
String windowsZone = ...; // The result of executing the above C# program
String javaZone = TimeZone.getDefault().getID();
if (!javaZone.equals(windowsZone)) {
Java.setDefault( TimeZone.getTimeZone(windowsZone) );
}
はい、すべて非常に複雑ですが、うまくいくようです。