2015-01-29 2 views
-1

Я пытаюсь получить разницу во времени между датами как формат String, как 4 часа назад.Расчет разницы во времени между двумя экземплярами времени GMT как String

Вот мой код

В моем понимании Calendar.getInstance() дает время, как по Гринвичу. мое время сервера GMT, поэтому разница должна быть GMT Vs GMT, однако разница с этим кодом - GMT (Server) Vs. GMT +5 (Мой текущий часовой пояс)

Как я могу изменить разницу только по Гринвичу?

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     Date convertedDate = new Date(); 

     Calendar systemCal = Calendar.getInstance();    
     long currentTime = systemCal.getTimeInMillis(); 

     /***********************************/ 
     Calendar cal = Calendar.getInstance(); 

     try { 
      convertedDate = dateFormat.parse(dateString); 
     } catch (Exception e) { 
      return ""; 
     } 
     cal.setTime(convertedDate); 
     /***********************************/ 
     CharSequence myDateString = DateUtils.getRelativeTimeSpanString(cal.getTimeInMillis(), currentTime, DateUtils.MINUTE_IN_MILLIS); 
     return myDateString.toString();  
+0

Вы можете передать lacale в конструктор SimpleDateFormat –

+0

SimpleFormat не имеет ничего общего с ним. его уже в GMT –

+0

Calendar.getInstance() не дает времени в GMT. Он возвращает часовой пояс вашей машины. –

ответ

0

Попробуйте следующие коды. Он ясно демонстрирует, как анализировать дату и время String в часовой пояс GMT. Ключевой момент - это первая строка, которая устанавливает часовой пояс по умолчанию.

TimeZone.setDefault(TimeZone.getTimeZone("UTC")); 
    SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Calendar cal = Calendar.getInstance(); 

    try { 
     Date convertedDate = dateFormatGmt.parse("2015-01-29 10:05:00"); 
     long diffSeconds = (cal.getTimeInMillis() - convertedDate.getTime())/1000; 
     System.out.println("convertedDate: " + convertedDate); 
     System.out.println("current: " + cal.getTime()); 
     System.out.println("Difference in seconds: " + diffSeconds); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

Я нашел простое решение. я перевернул время моего сервера в свой часовой пояс, а затем вычислил разницу. Самое простое решение. Установка dateFormatGmt.setZone (TimeZone.getDefault()) –

0

Calendar.getInstance() возвращает часовой пояс, на который установлен компьютер. Поэтому, если у вас нет контроля над этим, я бы советовал использовать метод getInstance (TimeZone zone).

http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#getInstance%28java.util.TimeZone%29

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT")); 

Но если вы хотите более простой способ сделать это я бы посоветовал посмотреть в времени Joda.

http://www.joda.org/joda-time/

+0

его все тот же, я думаю, что по умолчанию он отправляет время по Гринвичу, его значка с DateUtils.getRelativeTimeSpanString –

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