C++ Citrix C和x2B的时区问题+/全路径名

C++ Citrix C和x2B的时区问题+/全路径名,c++,time,timezone,citrix,xenapp,C++,Time,Timezone,Citrix,Xenapp,我对Citrix有一个问题,时区(GetTimeZoneInformation())返回客户端的where,而所有其他时间函数(GetLocalTime(),localtime())返回服务器的时间。有趣的是,SystemTimeToTzSpecificLocalTime()还返回服务器的时间,即使我传递给函数的时区信息是客户端的 我知道XenApp 5.0使用tzhook.dll钩住调用,根据配置返回客户端或服务器的调用。这应该解释为什么即使偏差和UTC是正确的,SystemTimeToTzS

我对Citrix有一个问题,时区(
GetTimeZoneInformation()
)返回客户端的where,而所有其他时间函数(
GetLocalTime()
localtime()
)返回服务器的时间。有趣的是,
SystemTimeToTzSpecificLocalTime()
还返回服务器的时间,即使我传递给函数的时区信息是客户端的

我知道XenApp 5.0使用tzhook.dll钩住调用,根据配置返回客户端或服务器的调用。这应该解释为什么即使偏差和UTC是正确的,
SystemTimeToTzSpecificLocalTime()
仍然返回服务器的时间,而UTC-bias数学应该返回客户端的时间

Xenapp配置为使用客户端的时区。我还根据本文在注册表中验证了这一点。另一个有趣的是.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与当地时间:14:50
UTC至本地,无TZ:16:50
当地至UTC,时间:19:50
本地到UTC,无TZ:19:50

固定转换:

UTC与当地时间:14:50
当地至UTC,时间:21:50

时区信息正在使用Win API。固定的是我根据偏差计算时间的例行程序。粗体的是问题和解决方案


那么,是否有此问题的修补程序?

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

你可以做类似的事情:

  • 用于获取UTC时间
  • 用于获取客户端时区
  • 然后使用或(视情况而定)转换

因此,
GetSystemTime()
起作用,我得到UTC时间,
GetTimeZoneInformation()
起作用,我得到客户端时区。到现在为止,一直都还不错。但是,正如前面提到的,
systemtimetotzspecificclocaltime()
,总是转换为服务器时间。传入时区信息,即客户端的,返回值为true。我怀疑钩子dll看到了这个函数并返回了服务器时间,而没有检查时区信息是否为空或其他。这很不幸。看来他们的“钩子”太大了。也许他们在新版本中解决了这个问题?我不知道。你可以试试“前”版本。也许他们没有弄脏那个。