Как преобразовать строку даты в объект даты или календаря? - PullRequest
63 голосов
/ 04 сентября 2008

У меня есть String представление даты, из которой мне нужно создать объект Date или Calendar. Я просмотрел Date и Calendar API, но не нашел ничего, что могло бы сделать это, кроме создания моего собственного уродливого метода разбора. Я знаю, что должен быть способ, кто-нибудь знает решение?

Ответы [ 5 ]

126 голосов
/ 04 сентября 2008

Вкратце:

DateFormat formatter = new SimpleDateFormat("MM/dd/yy");
try {
  Date date = formatter.parse("01/29/02");
} catch (ParseException e) {
  e.printStackTrace();
}

Подробнее см. SimpleDateFormat javadoc .

И чтобы превратить его в Calendar, выполните:

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
14 голосов
/ 29 октября 2015

ТЛ; др

LocalDate.parse( "2015-01-02" )

java.time

Java 8 и более поздние версии имеют новую структуру java.time , которая делает эти ответы устаревшими. Этот фреймворк вдохновлен Joda-Time , определенным JSR 310 и расширенным проектом ThreeTen-Extra . См. Учебник .

Старые связанные классы, java.util.Date/.Calendar, общеизвестно хлопотны и запутаны. Избегайте их.

LocalDate

Как и Joda-Time, java.time имеет класс LocalDate для представления значения только для даты без времени суток и без часового пояса.

ISO 8601

Если ваша входная строка имеет стандартный ISO 8601 формат yyyy-MM-dd, вы можете попросить этот класс непосредственно проанализировать строку без необходимости указывать форматер.

Форматы ISO 8601 по умолчанию используются в java.time как для синтаксического анализа, так и для генерации строковых представлений значений даты и времени.

LocalDate localDate = LocalDate.parse( "2015-01-02" );

Formatter

Если у вас другой формат, укажите форматер из пакета java.time.format . Вы можете указать свой собственный шаблон форматирования или позволить java.time автоматически локализовать в соответствии с Locale, указав человеческий язык для перевода и культурные нормы для решения таких вопросов, как точка против запятой.

Шаблон форматирования

Прочитайте документацию класса DateTimeFormatter для получения подробной информации о кодах, используемых в шаблоне формата. Они немного отличаются от старых устаревших 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.time локализуется для вас. Позвоните по номеру 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

9 голосов
/ 04 сентября 2008

высоко оцененная библиотека Joda Time также стоит посмотреть. Это основа для нового даты и времени API , который написан для Java 7. Дизайн аккуратный, интуитивно понятный, хорошо документированный и позволяет избежать большой неуклюжести оригинала java.util.Date / java.util.Calendar классы.

Joda DateFormatter может анализировать строку для Joda DateTime.

0 голосов
/ 04 сентября 2008

Класс DateFormat имеет метод parse.

См. http://java.sun.com/j2se/1.4.2/docs/api/java/text/DateFormat.html для получения дополнительной информации.

0 голосов
/ 04 сентября 2008

Попробуйте это:

DateFormat.parse(String)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...