2012-05-09 12 views
2

当社のJavaアプリケーションはJava for XenAppでタイムゾーンの設定を取得するには、どのような方法がありますか?

TimeZone tz = TimeZone.getDefault() 

を使用するマシンのタイムゾーンの設定を取得する任意の他の方法はありますか? Windows XPでは、Windows上で、スタンドアロンのJavaアプリケーションを、Tomcatの5/6/7の内側:TimeZone.getDefault()を使用して

背景

は、私たちのアプリケーションが実行されるすべての環境では、かなりの時間のために私たちのために非常によく働いています7およびWindows Server 2003/2008,32および64ビット。

しかし、最近、Windows 2008 R2上でXenApp 6.5を使用してアプリケーションをリモートから実行し始めました。この環境では、XenAppが"time zone redirection"を実行するように設定されていても、アプリケーションに表示されるタイムゾーンはサーバーのタイムゾーンであり、クライアントのタイムゾーンではありません。

+0

ユーザーから聞いてもらえますか? – heikkim

+0

heikkim、はい、これは私達がそれ以外の方法で動作させることができない場合、私たちの最後の手段です。ただし、これはCitrix XenAppの広告機能であり、他のJava以外のアプリケーションでも機能します。ユーザーに尋ねる必要がない場合は、実際にはしません。 –

+0

ほとんどのユーザーは実際に自分のタイムゾーンが何かを知りませんでした。リストを見ると、なぜそれが見えないのですか? – Oversteer

答えて

0

JavaとのCitrix XenAppの既知の問題です表示されます。 IBMのJavaベースのLotus Notesクライアントでさえ、problemに苦しんでいます。残念ながらどこでも解決策を見つけることができませんでした。

タイムゾーンを取得する非常に単純なC#プログラムを作成することで、この問題を回避することができました。これにより、クライアントのタイムゾーンが正しく読み取られます。 tz database形式で時刻を読み取るには、NodaTimeライブラリを使用しました。これは、Javaがタイムゾーンを識別するために使用する形式です。私はのRuntime.execを(使用して、このC#のプログラムを実行し、私のJavaプログラムから

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); 
     } 
    } 
} 

)および技術は、このプログラムの出力を読み取るためにhereを説明:ここでプログラムです。

私はこれを持っていたら、私は、単に時間帯は、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)); 
} 

すべてを動作するように表示されます。

+0

これまでのところ私は実際の問題を発見した唯一の解決策として私自身の答えを受け入れています。 –

0

calenderオブジェクトを使用して、このオブジェクトからタイムゾーンを作成して取得することができます。例:

TimeZone tz = Calendar.getInstance().getTimeZone(); 
+0

返事をありがとう。私はこれを試して、TimeZone.getdDefault()と同じものを返します。 TimeZone.getDefault()を使用してカレンダーがタイムゾーンを取得するように、少し深く掘り下げます。 –

0
System.getProperty("user.timezone"); 
+0

Java 6はすでにこれをフードの下で行います。参照してください:java.util.TimeZone#getDefault() – heikkim

+0

クール...これは本当の代替ではありません:( – Renato

関連する問題