0

最近 XenApp 6.5 プラットフォームに移行したばかりのレガシー Java アプリケーションを維持しています。

しかし、現在の時刻を表示すると、Powered Shared Desktop のユーザーの時刻ではなく、サーバーの時刻が表示されます。

たとえば、ユーザーのタイムゾーン オフセットは 9.5 ですが、タイムゾーンを出力すると 10 と表示されます。

私たちは試しました:

TimeZone.getDefault().getID());
System.getProperty("user.timezone"));

そして、次の方法で時間を取得しています。

private final static DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
private Calendar                intCal;


intCal = Calendar.getInstance();
intCal.setTimeInMillis(System.currentTimeMillis());
String df = dateFormat.format(intCal.getTime());

ユーザーの時間を取得する公式の方法はありますか?

また、VBS を使用して同じものを出力します。

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colTimeZone = objWMIService.ExecQuery("Select * from Win32_TimeZone")

For Each objTimeZone in colTimeZone
    Wscript.Echo "Offset: "& objTimeZone.Bias / 60
Next
4

2 に答える 2

1

サーバー セッションがクライアント デバイスのタイムゾーンを使用するように、タイムゾーン リダイレクトが有効になっていることを確認する必要があります。XenApp 6.5 では、Citrix 固有の XenApp ポリシーと Windows RDS ポリシーの両方で、2 つの場所でこれをオンにする必要があります。

次の記事では、GPO をセットアップして両方のポリシー設定を構成することにより、運用環境でそれを行う方法を示します。

http://support.citrix.com/article/CTX126099

ただし、これを単一のサーバーですばやくテストしたい場合は、すべてをローカルで編集できます。つまり、最初に Citrix AppCenter を開き、次のようにします。

  1. [ポリシー] ノードを選択します
  2. [ユーザー] タブを選択します
  3. デフォルトの「フィルターなし」ポリシーを選択します
  4. [編集] をクリックします。
  5. [ポリシーの編集] ダイアログで、[設定] タブを選択します。
  6. [タイム ゾーン コントロール] カテゴリまでスクロールして選択します。
  7. [クライアントの現地時間を使用する] 設定を探して、[追加] をクリックします。
  8. 表示される追加ダイアログで [OK] をクリックします。
  9. [ポリシーの編集] ダイアログで [OK] をクリックして閉じます。

リンクしたサポート記事の手順 12 と同様に、gpedit.msc を実行します。

  1. 次のノードを選択します: コンピューターの構成\管理用テンプレート\Windows コンポーネント\リモート デスクトップ サービス\リモート デスクトップ セッション ホスト\デバイスとリソースのリダイレクト
  2. [タイム ゾーンのリダイレクトを許可する] ポリシーを編集して、[有効] に設定します。

タイムゾーンのリダイレクトが設定されると、選択した任意の開発言語で標準の日付/時刻 API を使用できるようになります。

于 2015-04-15T06:53:52.910 に答える
0

これは JRE 自体のバグであり、2011 年に発生したことがわかりました。最近、Java 9 の初期リリースで修正されました。

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7044727

于 2015-05-08T04:36:01.690 に答える