2013-11-11 4 views
0

Я бы ожидал, что приведенный ниже код вернет мне время в мой местный часовой пояс (US EST), но я продолжаю получать время назад на 5 часов раньше, чем мое текущее время. Значение моего userTimeZoneOffset составляет -300, что является правильной сметой минут от UTC для моего часового пояса. dateAndTimeFormat установлен на «MM/dd/yyyy h: mm a» для меня.Не могу получить время для расчета на основе UTC

Как я могу получить переменную currentDateAndTime ниже, чтобы рассчитать расчет по UTC, а не мой текущий часовой пояс?

String dateAndTimeFormat = i18nUtil.getValue(locale, "dateAndTimeFormat"); 
SimpleDateFormat sdf = new SimpleDateFormat(dateAndTimeFormat); 
sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 
if (userTimeZoneOffset != null) { 
    calendar.add(Calendar.MINUTE, userTimeZoneOffset); 
} 
String currentDateAndTime = sdf.format(calendar.getTime()); 
return currentDateAndTime; 
+0

Вставки обязательного «использовать Jodatime» комментарий –

+0

Вы создаете календарь, чье время текущее время, а затем удалить 300 минут от него, и затем удивляются, что это не в настоящее время больше? Если вам нужно текущее время, 'Calendar.getInstance()' достаточно. Если вы хотите, чтобы текущее время было отформатировано в вашем часовом поясе, то достаточно «нового SimpleDateFormat (pattern) .format (new Date())». –

+0

Я уже знаю и понимаю 'new Date()' даст мне время в моем текущем часовом поясе. Я хочу получить время UTC и применить любое смещение, переданное ему, и вернуть это. –

ответ

1

Как я уже упоминал в комментарии, вы должны посмотреть на Joda-Time вместо библиотеки Java DateTime/Calendar.

Чтобы получить текущее время в формате UTC, вы должны импортировать следующие пакеты и вызовите следующую строку кода:

import org.joda.time.DateTime; 
import org.joda.time.DateTimeZone; 

DateTime utcDateTime = new DateTime(DateTimeZone.UTC); 

Похоже, вы также желание вычитая время от DateTime вы получаете. Для этого, вы могли бы назвать следующий метод:

DateTime estDateTime = utcDateTime.minusHours(5); 

Joda Время: http://www.joda.org/joda-time/

+0

Да, похоже, что это сработает ... серверы, на которых размещается мой код Java, находятся в другом часовом поясе, чем там, где мои клиенты, следовательно, мне нужно вычислять на основе UTC и смещения часового пояса каждого пользователя - спасибо. –

+0

Извините, что не ответил раньше. Я подумал, что это вопрос, на который можно быстро ответить. Одна вещь, которую следует соблюдать с Joda, заключается в том, что это неизменная замена Java Calendar и Date. Это здорово, но это определенно то, что я хочу, чтобы вы знали. –

Смежные вопросы