Преобразование UTC в текущее время локали

Я загружаю некоторые данные JSON из веб-службы. В этом JSON у меня есть некоторые значения Date / Time. Все в UTC. Как я могу проанализировать эту строку даты, чтобы объект Date Date находился в текущей локали?

Например: сервер вернул «2011-05-18 16:35:01», и мое устройство должно теперь отображать «2011-05-18 18:35:01» (GMT +2)

Мой текущий код:

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

Он имеет заданный часовой пояс:

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

все сделано!

Поэтому вы хотите сообщить SimpleDateFormat часового пояса UTC:

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

Для отображения:

 simpleDateFormat.setTimeZone(TimeZone.getDefault()); String formattedDate = simpleDateFormat.format(myDate); 

Ваша строка myUTC = “2016-02-03T06: 41: 33.000Z”

 SimpleDateFormat existingUTCFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); SimpleDateFormat requiredFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try{ Date getDate = existingFormat.parse(myUTC); String mydate = requiredFormat.format(getDate) } catch(ParseException){ } 
 public static String toLocalDateString(String utcTimeStamp) { Date utcDate = new Date(utcTimeStamp); DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); df.setTimeZone(TimeZone.getTimeZone("PST")); return df.format(utcDate); } 

Ура!

java.time

Я хотел бы внести современный ответ. Большинство других ответов верны и были прекрасными ответами в 2011 году. Сегодня SimpleDateFormat давно устарел, и он всегда приносил некоторые сюрпризы. И сегодня у нас намного лучше: java.time также известный как JSR-310, современный Java-интерфейс даты и времени. Этот ответ предназначен для всех, кто принимает внешнюю зависимость (только до java.time пор, пока java.time появится на вашем устройстве Android) или уже использует Java 8 или новее.

  DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss"); String dateTimeFromServer = "2011-05-18 16:35:01"; String localTimeToDisplay = LocalDateTime.parse(dateTimeFromServer, formatter) .atOffset(ZoneOffset.UTC) .atZoneSameInstant(ZoneId.of("Europe/Zurich")) .format(formatter); 

Результатом этого fragmentа кода является запрос:

 2011-05-18 18:35:01 

Дайте явный часовой пояс, если сможете

Я дал явный часовой пояс Европы / Цюриха. Пожалуйста, замените желаемый местный часовой пояс. Чтобы использовать настройки часового пояса вашего устройства, используйте ZoneId.systemDefault() . Однако имейте в виду, что это хрупко, потому что он принимает настройку часового пояса из JVM, и этот параметр может быть изменен под ногами другими частями вашей программы или другими программами, работающими в одной JVM.

Использование java.time на Android

Я обещал вам внешнюю зависимость. Чтобы использовать вышеперечисленное на Android, вам понадобится ThreeTenABP, версия Android от ThreeTen Backport, backport от JSR-310 до Java 6 и 7. Как это сделать, это хорошо и подробно объясняется в этом вопросе: как использовать ThreeTenABP на Android Проект .

Объект Date всегда является оберткой вокруг миллисекунд с эпохи 0 в формате UTC. Он никогда не представляет местного времени.

Это означает, что вам нужно создать второй SimpleDateFormatter, который создает строку отображения, которая находится по местному времени.

Изменить: @Op. Обратите внимание, что предпочтительным classом для форматирования даты и времени на Android является java.text.DateFormat

Если у вас была timestamp (Long) в качестве входного сигнала (для времени UTC), так как это на Android, вы можете сделать что-то вроде этого:

 fun DateFormat.formatUtcEpochSecond(epochSecond: Long): String = format(CalendarEx.getFromEpochSecond(epochSecond).time) fun DateFormat.formatUtcEpochMs(epochMilli: Long): String = format(CalendarEx.getFromEpochMilli(epochMilli).time) 

CalendarEx.kt

 object CalendarEx { @JvmStatic fun getFromEpochMilli(epochMilli: Long): Calendar { val cal = Calendar.getInstance() cal.timeInMillis = epochMilli return cal } @JvmStatic fun getFromEpochSecond(epochSecond: Long): Calendar { val cal = Calendar.getInstance() cal.timeInMillis = epochSecond * 1000L return cal } } 

DateHelper.kt

 /** * gets the default date formatter of the device */ @JvmStatic fun getFormatDateUsingDeviceSettings(context: Context): java.text.DateFormat { return DateFormat.getDateFormat(context) ?: SimpleDateFormat("yyyy/MM/dd", Locale.getDefault()) } /** * gets the default time formatter of the device */ @JvmStatic fun getFormatTimeUsingDeviceSettings(context: Context): java.text.DateFormat { return DateFormat.getTimeFormat(context) ?: SimpleDateFormat("HH:mm", Locale.getDefault()) } 

Пример использования:

  val dateFormat = DateHelper.getFormatDateUsingDeviceSettings(this) val timeFormat = DateHelper.getFormatTimeUsingDeviceSettings(this) val timeStampSecondsInUtc = 1516797000L val localDateTime = Instant.ofEpochSecond(timeStampSecondsInUtc).atZone(ZoneId.ofOffset("UTC", ZoneOffset.ofHours(0))).toLocalDateTime() Log.d("AppLog", "input time in UTC:" + localDateTime) Log.d("AppLog", "formatted date and time in current config:${dateFormat.formatUtcEpochSecond(timeStampSecondsInUtc)} ${timeFormat.formatUtcEpochSecond(timeStampSecondsInUtc)}") 
  • Преобразовать строку в строку, разделенную запятыми, в java
  • Библиотека FFT в android Sdk
  • Как обновить TextView от другого classа
  • Вопрос о блокировке Java
  • Ковариация, инвариантность и контравариантность объясняются на простом английском языке?
  • Как импортировать com.android.internal.telephony.ITelephony в приложение Android
  • Android Telegram App -> java.lang.UnsatisfiedLinkError: не реализована реализация для void
  • как динамически обновлять xml-файл из другого XML-файла?
  • Проблемы с импортом проекта в Android Studio в отношении ActionBarSherlock
  • Проблемы с альфа-тестированием OpenGL ES2
  • Доступ к мультимедийному streamу Android для аудиовизуализации
  • Interesting Posts

    .NET TimeZoneInfo из часового пояса Олсона

    Когда использовать абстрактные classы?

    Зебра разбивает таблицу со скрытыми строками с помощью CSS3?

    Firefox: автоматически вставлять ссылки в мой открытый текстовый редактор

    Расширьте раздел Windows 7, чтобы использовать свободное пространство перед ним.

    Получите прокрутку с двумя пальцами на сенсорной панели ноутбука Windows (например, на macbook)?

    Существует ли Visual Studio 2010 на разных языках?

    Как написать Firefox Addon?

    Как отформатировать мой 8-гигабайтный USB-накопитель в FAT / FAT16 в Windows 7?

    Яркость монитора ноутбука изменяется в зависимости от отображаемого изображения

    Как подключить заголовки LPT и COM-портов на материнской плате?

    Вызов статического метода с использованием отражения

    как я могу вставить lua в java?

    Почему меньше хвостового режима перестает работать?

    Как сделать несколько фотографий, прежде чем отклонить намерение камеры?

    Давайте будем гением компьютера.