Силой Ява часовой пояс по Гринвичу/по Гринвичу
Мне нужно принудительно выполнять любые операции, связанные с 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 args.
мне пришлось установить часовой пояс JVM для Windows 2003 Server, потому что он всегда возвращал GMT для новой даты();
-Duser.timezone=America/Los_Angeles
и ваш часовой пояс. Поиск списка часовых поясов также оказался немного сложным...
вот два список;
http://wrapper.tanukisoftware.com/doc/english/prop-timezone.html
для меня, просто быстрый 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: var 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)