Как преобразовать строку даты в объект Даты или Календаря?

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

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Вкратце:

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);

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

tl;dr

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

java.время

Java 8 и более поздние версии имеют новый java.время структура, которая делает эти другие ответы устаревшими.Этот фреймворк вдохновлен Джода-Время, определяемый JSR 310, и расширяется за счет Три дня-Дополнительно проект.Смотрите на Учебник.

Старые связанные классы 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" );

Форматирующее устройство

Если у вас другой формат, укажите средство форматирования из списка java.time.формат посылка.Вы можете либо указать свой собственный шаблон форматирования, либо позволить java.time автоматически локализоваться в соответствии с 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 );

Локальная дата: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

Тот Самый высоко ценимый Библиотека Времени Джоды это тоже стоит посмотреть.Это основа для нового api даты и времени это указано карандашом для Java 7.Дизайн аккуратный, интуитивно понятный, хорошо документированный и позволяет избежать большей части неуклюжести оригинала java.util.Date / java.util.Calendar классы.

Joda's DateFormatter может разобрать строку в Joda DateTime.

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

DateFormat.parse(String)

Тот Самый DateFormat класс имеет parse способ.

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

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