Как преобразовать 2010-12-15t16: 26: 49.841-08: 00 в григорянкалендарь в Яве? [дублировать

StackOverflow https://stackoverflow.com/questions/4457108

Вопрос

Этот вопрос уже имеет ответ здесь:

У меня есть строковая дата "2010-12-15T16: 26: 49.841-08: 00", и мне нужно преобразовать его в Грегорианкалендарь в Яве. Как ты это делаешь?


Решение из ответа Джеспера

Код для решения с помощью JODA Time:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ").withOffsetParsed();
DateTime date = formatter.parseDateTime("2010-12-15T16:26:49.841-08:00");
Это было полезно?

Решение

К сожалению, стандарт SimpleDateFormat Класс не может справиться ISO 8601 Формат очень хорошо. В частности, он не может справиться : Это в смещении часового пояса в конце.

Что вы можете сделать, так это вручную удалить : от смещения часового пояса, чтобы вы получили строку, которая выглядит так:

2010-12-15T16:26:49.841-0800

(Обратите внимание, что смещение часового пояса -0800 вместо -08:00) Тогда вы можете проанализировать это с помощью SimpleDateFormat с форматом yyyy-MM-dd'T'HH:mm:ss.SSSZ.

Но лучше использовать популярность Joda-Time библиотека для обработки времени и дат; Это намного лучше, чем стандартная дата API Java и классы календаря и правильно обрабатывает формат ISO 8601.

Другие советы

Используйте SimpleDateFormat, см. Javadocs здесь:

Затем преобразуйте дату в календарь. Взгляните на множество примеров здесь:

Вы можете попробовать с этим кусочком кода

DateTimeFormatter formatter =
    DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();

Это определенно даст вам григорианский календарный объект

 String dateTimeString="2010-12-15T16:26:49.841-08:00"; 

 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

 DateTime dateTime = formatter.parseDateTime(dateTimeString);

 GregorianCalendar cal = dateTime.toGregorianCalendar();

Другие ответы верны, но теперь устаревшие. Они используют неприятные старые классы, которые теперь вытеснены Java.time Framework.

Использование Java.Time

Входная строка соблюдается ISO 8601 стандартное форматирование. Таким образом, нет необходимости указывать шаблон форматирования, поскольку классы Java.Time используют ISO 8601 по умолчанию при анализе/генерации строк.

Входная строка включает в себя смещение от UTC, поэтому мы анализируем как OffsetDateTime.

String input = "2010-12-15T16:26:49.841-08:00" ;
OffsetDateTime odt = OffsetDateTime.parse( input );

Если у вас есть конкретный часовой пояс, а не просто смещение от UTC, примените это.

ZoneId zoneId = ZoneId.of( "America/Los_Angele" );
ZonedDateTime zdt = odt.atZone( zoneId );

GregorianCalendar

Вы должны избегать старых уроков даты, таких как GregorianCalendar. Анкет Но если вы должны взаимодействовать со старым кодом, еще не обновленным для Java.Time, вы можете конвертировать. Используйте новые методы, добавленные в старые классы для преобразования. Для получения дополнительной информации и изящной диаграммы, см. Вопрос а также Отвечать.

Calendar cal = java.util.GregorianCalendar.from( zdt );  // Do such conversions out of java.time only if absolutely necessary.

О Java.time

А Java.time Рамки встроены в Java 8 и позже. Эти классы вытесняют старые неприятные уроки даты времени, такие как java.util.Date, .Calendar, & java.text.SimpleDateFormat.

А Joda-Time Проект, теперь в Режим технического обслуживания, советует миграцию в Java.Time.

Чтобы узнать больше, увидеть Оракул Учебник. Анкет И поиск стека переполнены для многих примеров и объяснений.

Большая часть функциональности Java.Time возвращается к Java 6 и 7 в Трит-Бэкпорт и дальнейший адаптирован к Android в Threetenabp.

А Третена-Экстра Проект расширяет Java.Time с дополнительными классами. Этот проект является проверкой для возможных будущих дополнений к Java.Time. Вы можете найти здесь полезные классы, такие как Interval, YearWeek, YearQuarter, и более.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top