【问题标题】:Time zone issue with Citrix C++/Win APICitrix C++/Win API 的时区问题
【发布时间】: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


    【解决方案1】:

    .Net 行为正确,因为DateTime.Now 以 UTC 时间开始并应用本地时区,而不是从本地时间开始。

    你可以做类似的事情:

    【讨论】:

    • 所以,GetSystemTime() 有效,我得到了 UTC 时间,GetTimeZoneInformation() 有效,我得到了客户端时区。到目前为止,一切都很好。但是,如前所述,SystemTimeToTzSpecificLocalTime() 始终转换为服务器时间。传入客户端的TimeZone信息,返回值为true。我怀疑钩子 dll 看到这个函数并返回服务器时间,而不检查时区信息是 NULL 还是其他。
    • 这很不幸。看起来他们的“钩子”太过分了。也许他们已经在新版本中修复了这个问题?我不知道。你可以试试“Ex”版本。也许他们并没有把那个弄脏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    相关资源
    最近更新 更多