Современный способ состоит из классов java.time.
ZonedDateTime
Укажите шаблон форматирования, чтобы соответствовать вашей входной строки. Коды аналогичны SimpleDateFormat
, но не совсем. Обязательно прочтите класс doc для DateTimeFormatter
. Обратите внимание, что мы указываем Locale
, чтобы определить, какой язык используется для имени дня недели и названия месяца.
String input = "Wed Jul 08 17:08:48 GMT 2009";
DateTimeFormatter f = DateTimeFormatter.ofPattern ("EEE MMM dd HH:mm:ss z uuuu" , Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse (input , f);
Н.toString(): 2009-07-08T17: 08: 48Z [GMT]
Мы можем настроить его в любой другой часовой пояс.
Укажите proper time zone name в формате continent/region
. Никогда не используйте аббревиатуру 3-4 букв, такую как CDT
или EST
, или IST
, поскольку они не являются настоящими часовыми поясами, а не стандартизированы и даже не уникальны (!).
Я думаю, что на CDT
вы имели в виду часовой пояс, например America/Chicago
.
ZoneId z = ZoneId.of("America/Chicago");
ZonedDateTime zdtChicago = zdt.withZoneSameInstant(z);
zdtChicago.toString() 2009-07-08T12: 08: 48-05: 00 [Америка/Чикаго]
Instant
Вообще лучше работать в UTC. Для этого экстракта Instant
. Класс Instant
представляет собой момент на временной шкале в UTC с разрешением nanoseconds (до девяти (9) цифр десятичной дроби).
Этот класс Instant
является базовым классом строительного блока java.time. Вы можете представить ZonedDateTime
как Instant
плюс ZoneId
.
Instant instant = zdtChicago.toInstant();
instant.toString(): 2009-07-08T17: 08: 48Z
О java.time
java.time каркас встроен в Java 8 и позже. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
.
Проект Joda-Time, теперь в maintenance mode, советует перейти на java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.
Где получить классы java.time?
- Java SE 8 и SE 9, а затем
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
- Android
- Проект ThreeTenABP адаптирует ThreeTen-Backport (как упоминалось выше) для Android специально.
- См. How to use….
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more.
К сожалению, я не могу добавить другую зависимость без дополнительной записи, с которой я хочу иметь дело. Должен быть способ отформатировать часовые пояса с использованием стандартных java-библиотек. –
Существует, как указано в ответе. Просто ожидайте больше боли, если у вас есть другие манипуляции с датой и временем. –
Не помогает. Форматировщик всегда выплевывает время в GMT, а не запрошенный CDT. –