2016-04-26 10 views
2

У меня есть строка даты: 2016-04-26T09:14:10.477Z, которая находится в часовом поясе UTC. Я хочу преобразовать его в пользовательскую локальную часовую зону, поэтому, если это GMT +02: 00, мне нужна дата со значением 2016-04-26T11:14:10.477Z (обратите внимание на 9 изменений на 11).как преобразовать дату UTC в локаль GMT время на android

Я использую это до сих пор:

val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.getDefault()) 
val now = Date() 

val limit = sdf.parse(coupon.usedAt) 

Здесь limit = Tue Apr 26 09:14:10 GMT+02:00 2016, который не является правильным, я полагаю.

Так как я могу преобразовать его правильно? Благодаря!

Edit: мой вопрос отличается от this one, так как мне нужно использовать объект SimpleDateFormat и не Date один

+0

вы можете разделим на 1000 метки времени для преобразования UTC по Гринвичу – Naitik

+0

Возможный дубликат [Как Я получаю текущую дату и время в UTC или GMT на Java?] (Http://stackoverflow.com/questions/308683/how-can-i-get-the-current-date-and-time-in-utc- или-GMT-в-JA va) –

+0

Попробуйте с этим кодом. [Нажмите здесь, чтобы просмотреть все форматы даты и времени] (https://stackoverflow.com/questions/5369682/get-current-time-and-date-on-android/34328449#34328449) – Amitsharma

ответ

3

Попробуйте

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
Date myDate = simpleDateFormat.parse(rawQuestion.getString("AskDateTime")); 
0

Попробуйте это.

String dateString = "04/26/2016 10:22:00 AM"; 
    SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss aa"); 
    Date convertedDate = new Date(); 
    try { 
     convertedDate = dateFormat.parse(dateString); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeZone(TimeZone.getTimeZone("UTC")); 
    calendar.setTime(convertedDate); 
    Date time = calendar.getTime(); 
    SimpleDateFormat outputFmt = new SimpleDateFormat("MMM dd, yyy h:mm a zz"); 
    String utcTime = outputFmt.format(time); 
0
DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); 
    Date date = sdf.parse("2016-04-26T09:14:10.477Z"); 
    sdf.setTimeZone(TimeZone.getTimeZone("IST")); 
    System.out.println(sdf.format(date)); 
0

Попробуйте заменить формат

public static final String DATE_FORMAT  = "yyyy-MM-dd'T'HH:mm:ss'Z'"; 

public static String getFormattedLocalTimeFromUtc (String utcTimeStamp, String outputFormat) { 

    String formattedTime = null; 
    if (!TextUtils.isEmpty (utcTimeStamp)) { 
    if (utcTimeStamp.contains ("T")) { 

     String localTime = null; 
     SimpleDateFormat sdf = new SimpleDateFormat (DATE_FORMAT, Locale.getDefault()); 
     sdf.setTimeZone (TimeZone.getTimeZone ("UTC")); 
     try { 
      localTime = sdf.parse (utcTimeStamp).toString(); 
     } 
     catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     DateFormat inputDateFormat = new SimpleDateFormat ("EEE MMM dd HH:mm:ss z yyyy"); 
     inputDateFormat.setTimeZone (TimeZone.getTimeZone ("UTC")); 
     Date date = null; 
     try { 
      date = inputDateFormat.parse (localTime); 
     } 
     catch (ParseException e) { 
      e.printStackTrace(); 
     } 

     DateFormat outputDateFormat = new SimpleDateFormat (outputFormat); 
     formattedTime = outputDateFormat.format (date); 
    } 
    } 
    return formattedTime; 
}