Т.Л., д-р
ZonedDateTime.parse(
"Friday, September 26, 2008 8:30 PM Eastern Daylight Time" ,
DateTimeFormatter.ofPattern("EEEE, MMMM d, uuuu h:m a zzzz")
).getZone()
java.time
Современный путь с классами java.time. Вопросы и другие ответы используют неприятные старые устаревшие классы времени или проект Joda-Time, оба из которых теперь вытесняются классами java.time.
Определить объект DateTimeFormatter
с шаблоном форматирования в соответствии с вашими данными.
DateTimeFormatter f = DateTimeFormatter.ofPattern("EEEE, MMMM d, uuuu h:m a zzzz");
Назначить Locale
указать человеческий язык дня имя-и название месяца, а также культурные нормы для других вопросов форматирования.
f = f.withLocale(Locale.US);
Наконец, сделать синтаксический анализ, чтобы получить ZonedDateTime
объект.
String input = "Friday, September 26, 2008 8:30 PM Eastern Daylight Time" ;
ZonedDateTime zdt = ZonedDateTime.parse(input , f);
zdt.toString(): 2008-09-26T20: 30-04: 00 [Америка/New_York]
Вы можете задать для часового пояса от ZonedDateTime
, представленного в a ZoneId
объект. Затем вы можете допросить ZoneId
, если вам нужна дополнительная информация о часовом поясе.
ZoneId z = zdt.getZone();
See for yourself in IdeOne.com.
ISO 8601
Избегайте обмен данных даты и время в этом виде ужасного формата. Не принимайте на себя английский язык, не делайте аксессуар своей продукции с такими вещами, как имя дня, и никогда не используйте псевдо-часовые зоны, такие как Eastern Daylight Time
.
Для часовых поясов: Указать proper time zone name в формате continent/region
, такие как America/Montreal
, Africa/Casablanca
или Pacific/Auckland
. Никогда не используйте аббревиатуру 3-4 буквы, такую как EST
или IST
, поскольку они не являются настоящими часовыми поясами, а не стандартизированы и даже не уникальны (!).
Для сериализации значений даты и времени для текста используйте только форматы ISO 8601. Классы java.time используют эти форматы по умолчанию при разборе/генерации строк для представления их значения.
О java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
, & 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.
У вас было решение по этой проблеме? – Chin2 2015-09-24 10:54:43
Что касается последнего абзаца, классы «Дата» и «Календарь» - это кровавый беспорядок: плохо спроектированный, запутанный и хлопотный. Избежать их. Вместо этого используйте классы [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html). – 2016-10-26 05:09:13