Как преобразовать строку даты в объект даты или календаря?
у меня есть String представление даты, которую мне нужно создать Date или Calendar объект from. Я просмотрел Date и Calendar API, но не нашли ничего, что может сделать это, кроме создания моего собственного уродливого метода анализа. Я знаю, что должен быть способ, кто-нибудь знает решение?
5 ответов:
вкратце:
DateFormat formatter = new SimpleDateFormat("MM/dd/yy"); try { Date date = formatter.parse("01/29/02"); } catch (ParseException e) { e.printStackTrace(); }посмотреть
SimpleDateFormatдокументация дополнительные.и превратить его в
Calendar, do:Calendar calendar = Calendar.getInstance(); calendar.setTime(date);
tl; dr
LocalDate.parse( "2015-01-02" )java.время
Java 8 и позже появился новый java.время рамки, которые делают эти другие ответы устаревшими. Эта структура вдохновлена Joda Времени, определено JSR 310 и продлен ThreeTen-Extra. Смотрите учебник.
старые связанные классы, java.утиль.Дата./Календарь, как известно, хлопотно и запутанно. Избегать их.
LocalDateкак Джода-время, java.время имеет класс
LocalDateдля представления значения только для даты без времени суток и без часового пояса.ISO 8601
если ваша входная строка находится в стандартном ISO 8601 на
yyyy-MM-dd, вы можете попросить этот класс напрямую разобрать строку без необходимости указывать форматер.форматы ISO 8601 используются по умолчанию в java.время для парсинга и генерации строковых представлений значений даты-времени.
LocalDate localDate = LocalDate.parse( "2015-01-02" );форматер
если у вас другой формат, укажите форматер из java.время.формат. Вы можете либо указать свой собственный шаблон форматирования, либо позволить java.время автоматически локализуется в соответствии с
Localeопределение человеческого языка для перевода и культурных норм для решения таких вопросов, как Точка против запятой.форматирование шаблон
читать
DateTimeFormatterкласс doc для получения подробной информации о кодах, используемых в шаблоне формата. Они немного отличаются от старых устаревшихjava.text.SimpleDateFormatшаблоны класса.обратите внимание, как второй аргумент
parseметод ссылка на метод, синтаксис добавлен в Java 8 и более поздние версии.String input = "January 2, 2015"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "MMMM d, yyyy" , Locale.US ); LocalDate localDate = LocalDate.parse ( input , formatter );дамп в консоли.
System.out.println ( "localDate: " + localDate );localDate: 2015-01-02
локализации автоматически
или вместо того, чтобы указать шаблон форматирования, пусть java.время локализовать для вас. Звоните
DateTimeFormatter.ofLocalizedDate, и обязательно укажите желаемое / ожидаемоеLocaleвместо того, чтобы полагаться на текущее значение по умолчанию JVM, которое может измениться в любой момент во время выполнения(!).String input = "January 2, 2015"; DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG ); formatter = formatter.withLocale ( Locale.US ); LocalDate localDate = LocalDate.parse ( input , formatter );дамп в консоли.
System.out.println ( "input: " + input + " | localDate: " + localDate );вход: 2 января, 2015 | localDate: 2015-01-02
The высоко ценится библиотека времени Джоды также стоит посмотреть. Это основа для нового дата и время api это карандашом для Java 7. Дизайн аккуратный, интуитивно понятный,хорошо документированы и избегает много неуклюжести оригинала
Джода это!--15-->java.util.Date/java.util.Calendarклассы.DateFormatterможет разобрать строку на JodaDateTime.
The
DateFormatклассparseметод.см.http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html для получения дополнительной информации.
Comments