0

我们维护了一个旧版 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
4

2 回答 2

1

您需要确保启用时区重定向,以便服务器会话使用客户端设备的时区。在 XenApp 6.5 中,您必须在两个位置启用此功能,即 Citrix 特定的 XenApp 策略和 Windows RDS 策略。

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

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

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

  1. 选择策略节点
  2. 选择用户选项卡
  3. 选择默认的“未过滤”策略
  4. 单击编辑
  5. 在编辑策略对话框中选择设置选项卡
  6. 向下滚动到“时区控制”类别并选择它。
  7. 查找“使用客户端本地时间”设置,然后单击添加。
  8. 在弹出的添加对话框上单击确定。
  9. 单击“编辑策略”对话框上的“确定”将其关闭。

类似于我链接的支持文章中的第 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 回答