Современный способ - с классами java.time.
ZonedDateTime
Укажите шаблон форматирования, соответствующий вашей входной строке. Коды похожи на SimpleDateFormat
, но не совсем. Обязательно прочитайте документацию класса для 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 );
zdt.toString(): 2009-07-08T17:08:48Z[GMT]
Мы можем настроить это на любой другой часовой пояс.
Укажите правильное название часового пояса в формате 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 с разрешением наносекунды (до девяти (9) цифр десятичной дроби).
Этот класс Instant
является базовым классом строительных блоков java.time. Вы можете думать о ZonedDateTime
как о Instant
плюс ZoneId
.
Instant instant = zdtChicago.toInstant();
Instant.toString(): 2009-07-08T17:08:48Z
О java.time
Платформа java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, .Calendar
и java.text.SimpleDateFormat
.
Проект Joda-Time, теперь в режим обслуживания, советует перейти на java.time.
Чтобы узнать больше, см. учебник по Oracle. И поищите множество примеров и пояснений в Stack Overflow. Спецификация: JSR 310.
Где получить классы java.time?
- Java SE 8 and SE 9 and later
- Built-in.
- Часть стандартного Java API со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 and SE 7
- Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport.
- Android
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является испытательным полигоном для возможных дополнений к java.time в будущем. Здесь вы можете найти несколько полезных классов, таких как Interval
a>, YearWeek
, YearQuarter
и подробнее.
person
Basil Bourque
schedule
12.10.2016