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 然后:
- Select 策略节点
- Select 用户选项卡
- Select 默认 "Unfiltered" 政策
- 单击编辑
- 在“编辑策略”对话框中 select“设置”选项卡
- 向下滚动到 "Time Zone Control" 类别并 select 它。
- 查找 "Use local time of client" 设置并单击添加。
- 在弹出的添加对话框中单击“确定”。
- 单击“编辑策略”对话框中的“确定”将其关闭。
类似于我链接的支持文章中的步骤 12,运行 gpedit.msc:
- Select节点:计算机Configuration\AdministrativeTemplates\WindowsComponents\Remote桌面Services\Remote桌面会话Host\Device和资源重定向
- 编辑 "Allow time zone redirection" 策略,将其设置为已启用。
设置时区重定向后,您应该能够在您选择的任何开发语言中使用标准 date/time API。
我发现这是 JRE 本身的一个错误,它是在 2011 年提出的,最近已在 Java 9 的早期版本中修复:
我们维护着一个遗留 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 然后:
- Select 策略节点
- Select 用户选项卡
- Select 默认 "Unfiltered" 政策
- 单击编辑
- 在“编辑策略”对话框中 select“设置”选项卡
- 向下滚动到 "Time Zone Control" 类别并 select 它。
- 查找 "Use local time of client" 设置并单击添加。
- 在弹出的添加对话框中单击“确定”。
- 单击“编辑策略”对话框中的“确定”将其关闭。
类似于我链接的支持文章中的步骤 12,运行 gpedit.msc:
- Select节点:计算机Configuration\AdministrativeTemplates\WindowsComponents\Remote桌面Services\Remote桌面会话Host\Device和资源重定向
- 编辑 "Allow time zone redirection" 策略,将其设置为已启用。
设置时区重定向后,您应该能够在您选择的任何开发语言中使用标准 date/time API。
我发现这是 JRE 本身的一个错误,它是在 2011 年提出的,最近已在 Java 9 的早期版本中修复: