2016-12-09 10 views
1

У меня есть Текущее время в MILLISECONDS моего устройства.Время Конверсия Millisecond Местное время до Миллисекунда Время UTC в android

Теперь мне нужно, чтобы преобразовать его в миллисекунды UTC часового пояса

Так что я стараюсь, но это не преобразование в миллисекунде.

public static long localToUTC(long time) { 
    try { 
     SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a"); 
     sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
     Log.e("* UTC : " + time, " - " + sdf.format(new Date(time))); 
     Date date = sdf.parse(sdf.format(new Date(time))); 
     long timeInMilliseconds = date.getTime(); 
     Log.e("Millis in UTC", timeInMilliseconds + "" + new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a").format(date)); 
     return timeInMilliseconds; 
    } catch (Exception e) { 
     Log.e("Exception", "" + e.getMessage()); 
    } 
    return time; 
} 

и наоборот же для UTC миллисекунды в зона местного времени миллисекунды

Пожалуйста, дайте мне несколько советов.

+0

Код выглядит хорошо для меня. Вы уверены, что правильно его тестируете? Возможно, вы можете добавить образец ввода и ожидаемый результат. – Veeram

+0

Спасибо, я проверил его, он дает мне правильную дату, но когда я беру миллисекунды с объекта даты longtimeInMilliseconds = date.getTime(); это дает мне некоторое значение, которое неточно, что мне нужно –

ответ

0

для местных, чтобы UTC миллисекунда и наоборот

LOCAL TO UTC

public static long localToUTC(long time) { 
     try { 
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); 
      Date date = new Date(time); 
      dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
      String strDate = dateFormat.format(date); 
//   System.out.println("Local Millis * " + date.getTime() + " ---UTC time " + strDate);//correct 

      SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); 
      Date utcDate = dateFormatLocal.parse(strDate); 
//   System.out.println("UTC Millis * " + utcDate.getTime() + " ------ " + dateFormatLocal.format(utcDate)); 
      long utcMillis = utcDate.getTime(); 
      return utcMillis; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return time; 
    } 

и UTC к ЛОКАЛЬНОЙ

public static long utcToLocal(long utcTime) { 
     try { 
      Time timeFormat = new Time(); 
      timeFormat.set(utcTime + TimeZone.getDefault().getOffset(utcTime)); 
      return timeFormat.toMillis(true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return utcTime; 
    } 

Спасибо, я получил это решение

+0

Этот код не в состоянии конвертировать UTC - localhost. –

0

Некоторые замечания относительно кода:

  • Вы устанавливаете форматировщик в UTC, так что вы интерпретируете тайм-параметр как UTC, а не как «локальную миллисекунды», как это было сделаны в: sdf.format(new Date(time)));.

  • Date date = sdf.parse(sdf.format(new Date(time))); не имеет никакого смысла. Вы могли бы просто написать без необходимости форматирования и разбора: Date date = new Date(time);

Я не знаю, где вы получаете тайм-параметр с. Но ваше утверждение о том, что это должно интерпретироваться как «локальные миллисекунды», похоже, основано на недоразумении. При обработке глобально действительных моментов/моментов на временной шкале UTC, это не имеет значения, когда измеряется мгновенное время (оставляя сбои часов в стороне). Таким образом, параметр времени может быть измерен как время устройства через System.currentTimeMillis() и т. Д., Но вы можете напрямую сравнить его с любыми другими моментами (даже на других устройствах) без необходимости преобразования.

Если у вас действительно есть «локальные миллисекунды» (не должны обрабатываться публично за пределами выделенной библиотеки часовых поясов), тогда вам нужно смещение часового пояса для обработки преобразования, в противном случае это произвольная догадка. Формула для такого преобразования будет в псевдокоде:

[UTC-время] = [местное время] минус [зона смещения]

+0

Спасибо, я получил решение, приняв некоторую ошибку. –

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

  • Нет связанных вопросов^_^