У меня проблема с Citrix, где часовой пояс (GetTimeZoneInformation()
) возвращает клиента, где, как и все другие функции времени (GetLocalTime()
, localtime()
) возвращает время сервера. Что интересно, SystemTimeToTzSpecificLocalTime()
также возвращает время сервера, даже если информация о часовом поясе, которую я передаю функции, является клиентской.
Я знаю, что XenApp 5.0 использует tzhook.dll для подключения к вызовам, чтобы вернуть клиент или сервер в зависимости от конфигурации. Это должно объяснить, почему, хотя уклон и UTC верны, SystemTimeToTzSpecificLocalTime()
по-прежнему возвращает сервер, а UTC — Bias math должен был вернуть время клиента.
Xenapp настроен на использование часового пояса клиента. Я также подтвердил это в реестре на основе этой статьи CTX303498. Также интересно то, что .Net ведет себя правильно, он регистрирует и возвращает время / часовой пояс клиента. Я предполагаю, что у ловушки DLL есть какая-то ошибка, которая не применяет настройки единообразно ко всем функциям.
Кто-нибудь знает любое разрешение, кроме обновления до Xenapp 6.0? Модернизация находится в стадии разработки, но не произойдет до года или около того. Любые настройки реестра, патчи и т. Д.? Помощь приветствуется.
Citix Xenapp 5.0
Win 2008 r1
Обновить:
Я применил оперативное исправление CTX125414. Теперь я получаю непротиворечивое поведение, которое я получаю в клиентской среде, где время клиентское, но при преобразовании из Local в UTC используется смещение сервера.
Ниже приведен результат теста приложения.
Информация о местном времени:
Сейчас: 17.12.2013 14:50:54
GetLocalTime: 14:50
местное время: вт дек 17 14:50:54 2013
UTC Информация:
GetSystemTime: 21:50Информация о часовом поясе:
Уклон, Имя: 420, Стандартное время США
UTC для местного с TZ: 14:50
UTC для местного без TZ: 16:50
Местное время в UTC с TZ: 19:50
Местное время в UTC без TZ: 19:50Фиксированные конверсии:
UTC для местного с TZ: 14:50
Местное время в UTC с TZ: 21:50
Информация TimeZone использует Win API. Фиксированными являются мои процедуры, которые рассчитывают время из смещения. Смелые проблемы и исправления.
Итак, есть ли патч для этой проблемы?
.Сеть ведет себя правильно, потому что DateTime.Now
начинается с времени UTC и применяется местный часовой пояс, а не с местного времени.
Вы можете сделать что-то подобное:
GetSystemTime
чтобы получить время UTCGetTimeZoneInformation
получить часовой пояс клиента.SystemTimeToTzSpecificLocalTime
или же SystemTimeToTzSpecificLocalTimeEx
по мере необходимости.Других решений пока нет …