Как конвертировать RFC-1123 форматер даты и времени в местное время
Я получаю дату и время Thu, 25 Aug 2016 08:59:00 GMT
в этом формате RFC 1123 в моем приложении для Android. Мне нужно перевести на местное время.
1 ответ
DateTimeFormatter.RFC_1123_DATE_TIME
Классы java.time могут напрямую анализировать / генерировать строки в RFC 1123 через DateTimeFormatter.RFC_1123_DATE_TIME
постоянная.
ZonedDateTime zdt =
ZonedDateTime.parse(
"Thu, 25 Aug 2016 08:59:00 GMT" ,
DateTimeFormatter.RFC_1123_DATE_TIME
)
;
Оттуда настройте в желаемый часовой пояс.
ZoneId z = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", etc.
ZonedDateTime zdtMontreal = zdt.withZoneSameInstant( z );
К вашему сведению, этот формат RFC 1123 ужасен и устарел в наши дни. Проблемы формата включают в себя: предполагает английский язык, трудно анализировать и использует аббревиатуры зон из 3-4 букв, которые не являются зонами реального времени, не стандартизированы и даже не уникальны (!). Вместо:
- Укажите часовые пояса, используя надлежащие часовые пояса, определенные IANA.
- Сериализация в текст с использованием стандартных форматов ISO 8601.
Классы java.time по умолчанию используют эти форматы при разборе / генерации текстовых представлений значений даты и времени.
Поиск переполнения стека для получения дополнительной информации о настройке часовых поясов и генерации строк значений даты и времени.
О java.time
Инфраструктура java.time встроена в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые классы даты и времени, такие как java.util.Date
, Calendar
& SimpleDateFormat
,
Проект Joda-Time, находящийся сейчас в режиме обслуживания, рекомендует перейти на классы java.time.
Чтобы узнать больше, смотрите Oracle Tutorial. И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310.
Вы можете обмениваться объектами java.time напрямую с вашей базой данных. Используйте драйвер JDBC, соответствующий JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
классы.
Где взять классы java.time?
- Java SE 8, Java SE 9, Java SE 10, Java SE 11 и более поздние версии - часть стандартного API Java со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport.
- Android
- Более поздние версии Android связывают реализации классов java.time.
- Для более ранних версий Android (<26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). Смотрите Как использовать ThreeTenABP….
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь, такие как Interval
, YearWeek
, YearQuarter
и многое другое.