2016-05-23 6 views
3

Я работаю над Android-приложением, и я хочу преобразовать локальное время (время устройства) в UTC и сохранить его в базе данных. Получив его из базы данных, я должен его снова преобразовать и отобразить в часовом поясе устройства. Может ли кто-нибудь предложить, как это сделать на Java?Convert Local time to UTC и наоборот

+0

Улучшенный вопрос – AlBlue

ответ

14

Я преобразовал местное время в GMT/UTC и наоборот, используя эти два метода, и это отлично работает без каких-либо проблем для меня.

public static Date localToGMT() { 
    Date date = new Date(); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
    sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
    Date gmt = new Date(sdf.format(date)); 
    return gmt; 
} 

скоротать GMT дата/UTC, который вы хотите преобразовать в устройство по местному времени к этому методу:

public static Date gmttoLocalDate(Date date) { 

    String timeZone = Calendar.getInstance().getTimeZone().getID(); 
    Date local = new Date(date.getTime() + TimeZone.getTimeZone(timeZone).getOffset(date.getTime())); 
    return local 
} 
+0

Спасибо. его рабочий тон – appy

+0

новый Дата (дата строки) устарела. Вы не должны его использовать! –

0

Time.getCurrentTimezone()

получите вас часовой пояс и

Calendar c = Calendar.getInstance(); int seconds = c.get(Calendar.SECOND)

получит Вас время в формате UTC в секундах. Конечно, вы можете изменить значение, чтобы получить его в другом устройстве.

+0

скажем, если сегодня дата 5:34 вечера понедельника (IST), то как я получу его как 12:04 вечера Понедельник (UTC) – Dyo

+0

У вас фактически есть доступ к объекту времени на время, которое вам нужно преобразовать или сделать у вас просто есть строка? –

+0

У меня просто строка – Dyo

1

вы можете попробовать что-то вроде этого, чтобы вставить в БД:

SimpleDateFormat f = new SimpleDateFormat("h:mm a E zz"); 
    f.setTimeZone(TimeZone.getTimeZone("UTC")); 
    System.out.println(f.format(new Date())); 
    String dd = f.format(new Date()); 

Это уклонение от ур комментарий:

ВЫВОД:

1:43 вечера пн UTC

Для этого, -> convert он снова и дисплей времени устройства

UPDATE:

String dd = f.format(new Date()); 

     Date date = null; 
     DateFormat sdf = new SimpleDateFormat("h:mm a E zz"); 
     try { 
      date = sdf.parse(dd); 
     }catch (Exception e){ 

     } 
     sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata")); 
     System.out.println(sdf.format(date)); 

ВЫВОД:

7:30 PM ПН GMT + 05: 30

U может отображаться следующим образом.

+0

он отображает исключение исключающего указателя при попытке конвертировать его снова – Dyo

+0

невозможно, я пробовал и работает хорошо.может у дать мне трассировку стека ур app –

+0

я просто инициализирован Дата дата = новая дата() и его работа отлично спасибо – Dyo

0

Получить текущий UTC:

public String getCurrentUTC(){ 
     Date time = Calendar.getInstance().getTime(); 
     SimpleDateFormat outputFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     outputFmt.setTimeZone(TimeZone.getTimeZone("UTC")); 
     return outputFmt.format(time); 
} 
1

Упрощенная версия принятой ответ:

public static Date dateFromUTC(Date date){ 
    return new Date(date.getTime() + Calendar.getInstance().getTimeZone().getOffset(date.getTime())); 
} 

public static Date dateToUTC(Date date){ 
    return new Date(date.getTime() - Calendar.getInstance().getTimeZone().getOffset(date.getTime())); 
}