Принудительный часовой пояс Java как GMT / UTC

Мне нужно заставить любые связанные с временем операции GMT / UTC, независимо от часового пояса, установленного на машине. Любой удобный способ так в коде?

чтобы уточнить, я использую время сервера БД для всех операций, но он выходит в формате в соответствии с локальным часовым поясом.

спасибо!

9 ответов


OP ответил на этот вопрос, чтобы изменить часовой пояс по умолчанию для одного экземпляра запущенной JVM, установите user.timezone системное свойство:

java -Duser.timezone=GMT ... <main-class>

Если вам нужно установить определенные часовые пояса при получении объектов даты/времени / метки времени из базы данных ResultSet используйте вторую форму getXXX методы, которые принимает


также, если вы можете установить часовой пояс JVM таким образом

System.setProperty("user.timezone", "EST");

или -Duser.timezone=GMT в аргах JVM.


мне пришлось установить часовой пояс JVM для Windows 2003 Server, потому что он всегда возвращал GMT для новой даты ();

-Duser.timezone=America/Los_Angeles

и ваш часовой пояс. Поиск списка часовых поясов также оказался немного сложным...

вот два список;

http://wrapper.tanukisoftware.com/doc/english/prop-timezone.html

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzatz%2F51%2Fadmin%2Freftz.htm


для меня, просто быстрый SimpleDateFormat,

  private static final SimpleDateFormat GMT = new SimpleDateFormat("yyyy-MM-dd");
  private static final SimpleDateFormat SYD = new SimpleDateFormat("yyyy-MM-dd");
  static {
      GMT.setTimeZone(TimeZone.getTimeZone("GMT"));
    SYD.setTimeZone(TimeZone.getTimeZone("Australia/Sydney"));
  }

затем отформатируйте дату с другим часовым поясом.


Я бы извлек время из БД в необработанной форме (длинная метка времени или дата java), а затем использовал SimpleDateFormat для его форматирования или календарь для управления им. В обоих случаях вы должны установить часовой пояс объекта перед его использованием.

посмотреть SimpleDateFormat.setTimeZone(..) и Calendar.setTimeZone(..) дополнительные сведения


вы можете изменить часовой пояс, используя часовой пояс.setDefault ().


создайте пару клиент / сервер, так что после выполнения клиент-сервер отправляет правильное время и дату. Затем клиент запрашивает сервер pm GMT, и сервер отправляет обратно правильный ответ.


Вау. Я знаю, что это древняя нить, но все, что я могу сказать, это не называть часовой пояс.setDefault () в любом коде пользовательского уровня. Это всегда устанавливает часовой пояс для всей JVM и почти всегда очень плохая идея. Научитесь использовать джоду.библиотека времени или новый класс DateTime в Java 8, который очень похож на joda.библиотека времени.


Если вы хотите получить GMT время только с intiger: ВАР значение currentTime = новая дата(); var currentYear = '2010' var currentMonth = 10; var currentDay = '30' var currentHours = '20' var currentMinutes = '20' var currentSeconds = '00' var currentMilliseconds = '00'

currentTime.setFullYear(currentYear);
currentTime.setMonth((currentMonth-1)); //0is January
currentTime.setDate(currentDay);  
currentTime.setHours(currentHours);
currentTime.setMinutes(currentMinutes);
currentTime.setSeconds(currentSeconds);
currentTime.setMilliseconds(currentMilliseconds);

var currentTimezone = currentTime.getTimezoneOffset();
currentTimezone = (currentTimezone/60) * -1;
var gmt ="";
if (currentTimezone !== 0) {
  gmt += currentTimezone > 0 ? ' +' : ' ';
  gmt += currentTimezone;
}
alert(gmt)