Текущая дата / время в Java под Citrix Xenapp 6.5

Мы поддерживаем устаревшее Java-приложение, которое только что перешло на платформу XenApp 6.5.

Но когда мы отображаем текущее время, оно отображает время сервера, а не время пользователя на Powered Shared Desktop.

Например, пользователь находится в смещении часового пояса 9,5, но при выводе часового пояса он отображается как 10.

Мы попробовали:

TimeZone.getDefault().getID());
System.getProperty("user.timezone"));

И мы получаем время:

private final static DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
private Calendar                intCal;


intCal = Calendar.getInstance();
intCal.setTimeInMillis(System.currentTimeMillis());
String df = dateFormat.format(intCal.getTime());

Есть ли официальный способ получить время пользователя?

Также используя VBS, он выводит то же самое:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colTimeZone = objWMIService.ExecQuery("Select * from Win32_TimeZone")

For Each objTimeZone in colTimeZone
    Wscript.Echo "Offset: "& objTimeZone.Bias / 60
Next

2 ответа

Решение

Я обнаружил, что это ошибка в самой JRE, и она была обнаружена в 2011 году, недавно она была исправлена ​​в раннем выпуске Java 9:

http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7044727

Необходимо убедиться, что перенаправление часового пояса включено, чтобы сеанс сервера использовал часовой пояс клиентского устройства. В XenApp 6.5 вы должны включить это в двух местах, как в определенных политиках Citrix XenApp, так и в политиках Windows RDS.

В следующей статье показано, как сделать это в производственной среде, настроив объекты групповой политики для настройки обоих параметров политики:

http://support.citrix.com/article/CTX126099

Однако, если вы хотите просто быстро проверить это на одном сервере, вы можете просто отредактировать все локально. Т.е. сначала откройте Citrix AppCenter, затем:

  1. Выберите узел Политики
  2. Выберите вкладку "Пользователь"
  3. Выберите политику по умолчанию "Нефильтрованный"
  4. Нажмите Редактировать
  5. В диалоговом окне "Изменить политику" выберите вкладку "Настройки".
  6. Прокрутите вниз до категории "Контроль часового пояса" и выберите ее.
  7. Найдите параметр "Использовать локальное время клиента" и нажмите "Добавить".
  8. Нажмите OK в появившемся диалоговом окне добавления.
  9. Нажмите кнопку ОК в диалоговом окне "Изменить политику", чтобы закрыть его.

Аналогично шагу 12 в статье поддержки, которую я связал, запустите gpedit.msc:

  1. Выберите узел: Конфигурация компьютера \ Административные шаблоны \ Компоненты Windows \ Службы удаленных рабочих столов \ Узел сеансов удаленных рабочих столов \ Перенаправление устройств и ресурсов
  2. Отредактируйте политику "Разрешить перенаправление часовых поясов", чтобы установить ее "Включено".

После настройки перенаправления часового пояса вы сможете использовать стандартные API даты / времени на любом языке разработки, который вы выберете.

Другие вопросы по тегам