2015-06-16 2 views
0

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

import java.sql.Timestamp; 
import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 

    public class UTCtoLocalTime { 

private static String ConvertToLocalTime(String id, String time) throws ParseException{ 
    DateFormat localtime = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss"); 
    localtime.setTimeZone(TimeZone.getTimeZone(id)); 
    return localtime.format(localtime.parse(time)); 
} 

public static void main(String[] args) throws ParseException { 
    SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss"); 
    dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC")); 

    String time = dateFormatGmt.format(new Timestamp(System.currentTimeMillis())); 

    System.out.println("UTC time "+ time); 
    System.out.println("Local Time "+ ConvertToLocalTime("America/Mexico_City", time)); 
} 

}

Я не уверен, где я делаю ошибку. Может кто-нибудь мне помочь?

ответ

1

Дата не указано часовой пояс. В String time вы каким-то образом показываете дату и ожидаете, что этот дисплей будет использовать другой часовой пояс. Это не так.

Строка time представляет собой временную метку в одном часовом поясе, и вы хотите изменить, что в строку, которая представляет собой метку времени в другом часовом поясе,

Так в основном у вас есть

Создать другой SimpleDateFormat и примените второй часовой пояс к нему Используйте это, чтобы отформатировать объект Date до новой строки

Введен код

public class TestClass { 
     private static String ConvertToLocalTime(String id, String time) throws ParseException{ 
      DateFormat localtime = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss"); 
      localtime.setTimeZone(TimeZone.getTimeZone(id)); 
      return localtime.format(localtime.parse(time)); 
     } 

     public static void main(String[] args) throws ParseException { 
      SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss"); 
      dateFormatGmt.setTimeZone(TimeZone.getTimeZone("UTC")); 

      String time = dateFormatGmt.format(new Timestamp(System.currentTimeMillis())); 
      System.out.println("UTC time "+ time); 

      SimpleDateFormat dateFormatGmt1 = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss"); 
      String time1 = dateFormatGmt1.format(new Timestamp(System.currentTimeMillis())); 
      System.out.println("Local Time "+ ConvertToLocalTime("America/Mexico_City", time1)); 
     } 

     } 

, выводимые на моей машине

UTC time 2015-Jun-16 15:45:16 
Local Time 2015-Jun-16 21:15:16 
+0

В обеих случаях конвертируются текущее время местной даты в формат UTC и Америке/Mexico_City, но в моем случае я хочу использовать входящую метку времени UTC для преобразования в любой заданный часовой пояс. Это не помогает мне. – rakeeee

0

Здесь я использовать это, чтобы служить моей цели

public static String UTCtolocaltime(String timzoneid, String UTCTime){ 
     String convertedlocaldatetime; 
     Date datetimeinutc = null; 
     SimpleDateFormat utcdateFormat = new SimpleDateFormat(some patteren); 
     utcdateFormat.setTimeZone(TimeZone.getTimeZone(UTC)); 
     try { 
      datetimeinutc = utcdateFormat.parse(UTCTime); 
     } catch (ParseException e1) { 
      log.error(e1); 
     } 
     SimpleDateFormat localdateFormat = new SimpleDateFormat(some patteren); 
     localdateFormat.setTimeZone(TimeZone.getTimeZone(timzoneid)); 
      convertedlocaldatetime = localdateFormat.format(datetimeinutc); 
      return convertedlocaldatetime; 
    } 
0

Легко в Joda время:

Предполагая, что у вас есть DateTime, хранящую время поступления, которое в UTC, способ получить представление строки для другого часового пояса - это просто:

String result = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss") 
           .withZone(DateTimeZone.forID(timeZoneId)) 
           .print(utcDateTime); 

Различные комбинации String, LocalDateTime и DATETIME преобразования между UTC и другим часовым поясом, все очень легко

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