我对 Citrix 有疑问,其中时区 ( GetTimeZoneInformation()
) 返回客户端的位置,而所有其他时间函数 ( GetLocalTime()
, localtime()
) 返回服务器的时间。有趣的是,SystemTimeToTzSpecificLocalTime()
即使我传递给函数的时区信息是客户端的,它也会返回服务器的时间。
我知道 XenApp 5.0 使用 tzook.dll 来挂钩调用以根据配置返回客户端或服务器的调用。这应该解释为什么即使偏差和 UTC 是正确的,SystemTimeToTzSpecificLocalTime()
仍然返回服务器的,而 UTC - 偏差数学应该返回客户端的时间。
Xenapp 配置为使用客户端的时区。我还根据这篇文章CTX303498在注册表中验证了这一点。同样有趣的是 .Net 行为正确,它记录并返回客户端的时间/时区。我假设钩子 dll 有某种错误,不会在函数中统一应用设置。
有谁知道除了升级到 Xenapp 6.0 之外的任何解决方案吗?升级正在进行中,但要到一年左右才会发生。任何寄存器设置,补丁等?帮助表示赞赏。
花旗 Xenapp 5.0
赢 2008 r1
更新:
我应用了热修复 CTX125414。现在我得到了在客户端环境中得到的一致行为,其中时间是客户端的,但是当从本地转换为 UTC 时,它使用了服务器的偏差。
以下是测试应用程序的结果。
当地时间信息:
现在:2013 年 12 月 17 日下午 2:50:54
GetLocalTime:14:50本地时间:
2013 年 12 月 17 日星期二 14:50:54
UTC 信息:GetSystemTime:21:50时区信息:
偏差,名称:420,美国山地标准时间
UTC 到带有 TZ 的本地:14:50
UTC 到不带 TZ 的本地:16:50
本地到带有 TZ 的 UTC:19:50
本地到不带 TZ 的 UTC:19:50固定转换:
UTC 到本地 TZ:14:50
本地到 UTC TZ:21:50
时区信息正在使用 Win API。固定的是我从偏差计算时间的例程。粗体是问题和修复。
那么,有没有针对这个问题的补丁呢?