Вам просто нужно помнить, что объект Date (всегда) хранит дату / время в миллисекундах с начала эпохи в часовом поясе UTC / GMT. Что удивляет, так это то, что метод Date.toString () возвращает текстовое представление в часовом поясе JVM по умолчанию (через внутренний объект Calendar). (Взгляните на исходный код JDK.)
Так, например, на моей машине
Date now = new Date();
System.out.println(now.toString());
System.out.println(now.getTime())
даст
Fri Oct 02 06:56:24 EST 2009
1254430584531
Число миллисекунд, являющееся фактическими миллисекундами с момента времени в часовом поясе GMT / UTC.
Вы должны всегда использовать форматеры даты или экземпляры календаря при манипулировании / использовании объектов даты. Например:
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:MM:ss zzz yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(now.toString());
System.out.println(sdf.format(now));
дает
Fri Oct 02 06:56:24 EST 2009
Thu Oct 01 20:56:24 UTC 2009
В итоге: всегда обрабатывайте объект Date только как данные, миллисекунды с начала эпохи. (Не используйте ни один из устаревших методов и не используйте toString (), если вы не понимаете, что он отображает.) Для отображения, форматирования, преобразования (добавления времени вычитания и т. Д.) Всегда используйте экземпляр Calendar или DateFormat реализация и трудно ошибиться.
Как говорит Javadoc для даты:
'До JDK 1.1 класс Date имел две дополнительные функции. Это позволило интерпретировать даты как значения года, месяца, дня, часа, минуты и секунды. Это также позволило форматировать и анализировать строки даты. К сожалению, API для этих функций не поддается интернационализации. Начиная с JDK 1.1, класс Calendar должен использоваться для преобразования полей даты и времени, а класс DateFormat должен использоваться для форматирования и анализа строк даты. Соответствующие методы в Date устарели. '
Поэкспериментируйте с датами, календарями и форматерами и прочитайте Javadoc, и это станет немного понятнее.
Для первой части вашего вопроса вам не нужно устанавливать часовой пояс вашего сервера Glassfish для размещения ваших данных. Если вы хотите сохранить данные часового пояса со своими значениями данных / времени, используйте Календарь, а не дату в ваших объектах. Или, как я обычно делаю, все хранится как время UTC (в экземплярах db и Date в объектах), а часовые пояса используются только тогда, когда данные отображаются / выводятся или анализируются. Поэтому, когда ваши данные получены, проанализируйте их с помощью DateFormat или эквивалента с часовым поясом, установленным на +01: 00 (он может выбрать это из строки времени автоматически, если к нему прикреплен часовой пояс, как показано в примере).
Я не знаю конкретно о второй части вашего вопроса, но если реализация вашего конца веб-службы правильно обрабатывает даты и анализирует их, она должна обработать это без вашего вмешательства.