Citrix Xenapp 6.5 下 Java 中的当前 date/time

Current date/time in Java under Citrix Xenapp 6.5

我们维护着一个遗留 Java 应用程序,该应用程序最近才迁移到 XenApp 6.5 平台。

但是当我们显示当前时间时,它显示的是服务器时间,而不是用户在 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

您需要确保启用时区重定向,以便服务器会话使用客户端设备的时区。在 XenApp 6.5 中,您必须在两个地方打开它,在 Citrix 特定的 XenApp 策略和 Windows RDS 策略中。

以下文章展示了如何在生产环境中通过设置 GPO 来配置这两种策略设置:

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

但是,如果您只想在单个服务器上快速测试它,您可以在本地编辑所有内容。 IE。首先打开 Citrix AppCenter 然后:

  1. Select 策略节点
  2. Select 用户选项卡
  3. Select 默认 "Unfiltered" 政策
  4. 单击编辑
  5. 在“编辑策略”对话框中 select“设置”选项卡
  6. 向下滚动到 "Time Zone Control" 类别并 select 它。
  7. 查找 "Use local time of client" 设置并单击添加。
  8. 在弹出的添加对话框中单击“确定”。
  9. 单击“编辑策略”对话框中的“确定”将其关闭。

类似于我链接的支持文章中的步骤 12,运行 gpedit.msc:

  1. Select节点:计算机Configuration\AdministrativeTemplates\WindowsComponents\Remote桌面Services\Remote桌面会话Host\Device和资源重定向
  2. 编辑 "Allow time zone redirection" 策略,将其设置为已启用。

设置时区重定向后,您应该能够在您选择的任何开发语言中使用标准 date/time API。

我发现这是 JRE 本身的一个错误,它是在 2011 年提出的,最近已在 Java 9 的早期版本中修复:

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