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