Заставить часовой пояс Java как GMT / UTC

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

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

Благодаря!

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

 java -Duser.timezone=GMT ...  

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

 Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); ResultSet rs = ...; while (rs.next()) { Date dateValue = rs.getDate("DateColumn", tzCal); // Other fields and calculations } 

Или, установив дату в PreparedStatement:

 Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); PreparedStatement ps = conn.createPreparedStatement("update ..."); ps.setDate("DateColumn", dateValue, tzCal); // Other assignments ps.executeUpdate(); 

Это гарантирует, что значение, хранящееся в базе данных, будет последовательным, если столбец базы данных не сохранит информацию о часовом поясе.

Классы java.util.Date и java.sql.Date сохраняют фактическое время (миллисекунды) в UTC. Чтобы форматировать их на выходе в другой часовой пояс, используйте SimpleDateFormat . Вы также можете связать часовой пояс со значением с помощью объекта «Календарь»:

 TimeZone tz = TimeZone.getTimeZone(""); //... Date dateValue = rs.getDate("DateColumn"); Calendar calValue = Calendar.getInstance(tz); calValue.setTime(dateValue); 

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

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

или -Duser.timezone=GMT в аргументах JVM.

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

-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 для ее форматирования или Calendar для его манипулирования. В обоих случаях вы должны установить часовой пояс объектов перед его использованием.

Подробнее см. SimpleDateFormat.setTimeZone(..) и Calendar.setTimeZone(..)

Вы можете изменить часовой пояс, используя TimeZone.setDefault () – даже временно, для некоторых операций.

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

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

Если вы хотите получить время GMT только с помощью intiger: var currentTime = new Date (); 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) 
  • Игнорирование часовых поясов в Rails и PostgreSQL
  • Как мне заполнить список часовых поясов IANA / Olson от Noda Time?
  • Названия часовых поясов с одинаковыми свойствами дают разные результаты при применении к метке времени
  • Как установить часовой пояс MySQL?
  • Как справиться с летней экономией, используя TimeZone в Java
  • Установите системный часовой пояс из .NET.
  • Как получить часовой пояс из местоположения с использованием координат широты и долготы?
  • Параметр DateTime с часовым поясом формы PST / CEST / UTC / etc.
  • Как обрабатывать календарные часовые пояса с помощью Java?
  • Как правильно установить JVM TimeZone
  • Часовой пояс с рельсами 3
  • Давайте будем гением компьютера.