java.time
Я хотел бы предложить современный ответ.Большинство других ответов являются правильными и были хорошими ответами в 2011 году. Сегодня SimpleDateFormat
давно устарел и всегда сопровождался некоторыми сюрпризами.И сегодня у нас намного лучше: java.time
, также известный как JSR-310, современный Java-интерфейс даты и времени.Этот ответ предназначен для тех, кто принимает внешнюю зависимость (только до тех пор, пока 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);
Результатом этого фрагмента кода является то, что былоспросил:
2011-05-18 18:35:01
Укажите явный часовой пояс, если можете
Я указал явный часовой пояс Европы / Цюриха.Пожалуйста, укажите желаемый местный часовой пояс.Чтобы полагаться на настройку часового пояса вашего устройства, используйте ZoneId.systemDefault()
.Однако имейте в виду, что это хрупкое решение, поскольку оно требует настройки часового пояса от JVM, и этот параметр может быть изменен под нашими ногами другими частями вашей программы или другими программами, работающими в той же JVM.
Использование java.time на Android
Я обещал вам внешнюю зависимость.Чтобы использовать вышеперечисленное на Android, вам понадобится ThreeTenABP, версия Android ThreeTen Backport, бэкпорт JSR-310 для Java 6 и 7. Как это сделать, подробно и подробно объяснено в этого вопроса: Как использоватьThreeTenABP в Android Project .