У меня есть String
представление даты, из которой мне нужно создать объект Date
или Calendar
. Я просмотрел 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
javadoc.
И чтобы превратить его в Calendar
, выполните:
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
tl;dr
LocalDate.parse( "2015-01-02" )
Java.время
Java 8 и более поздние версии имеют новый java.time framework, который делает эти другие ответы устаревшими. Эта структура основана на Joda-Time, определяемом JSR 310 и дополненный проект ThreeTen-Extra. См. учебник.
Старые объединенные классы, java.util.Date/.Calendar, печально известны своей сложностью и путаницей. Избежать их.
LocalDate
Как и Joda-Time, java.time имеет класс LocalDate
< /a> для представления значения только для даты без времени суток и без часового пояса.
ИСО 8601
Если ваша входная строка находится в стандартном формате ISO 8601 yyyy-MM-dd
, вы можете попросить этот класс напрямую проанализировать строку без необходимости указывать средство форматирования.
Форматы ISO 8601 используются по умолчанию в java.time как для синтаксического анализа, так и для генерации строковых представлений значений даты и времени.
LocalDate localDate = LocalDate.parse( "2015-01-02" );
Форматтер
Если у вас другой формат, укажите средство форматирования из 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 );
местная Дата: 02 января 2015 г.
Локализация автоматически
Или вместо того, чтобы указывать шаблон форматирования, позвольте 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 г. | местная Дата: 02 января 2015 г.
Стоит также обратить внимание на высоко оцененную библиотеку Joda Time. Это основа для нового API даты и времени, который нарисован карандашом для Java 7. . Аккуратный, интуитивно понятный дизайн, хорошо документирован и позволяет избежать большей части неуклюжести оригинальные java.util.Date
/java.util.Calendar
классы.
DateFormatter
от Joda может анализировать строку для Джода DateTime
.
Попробуй это:
DateFormat.parse(String)
Класс DateFormat
имеет метод parse
.
Дополнительные сведения см. в разделе DateFormat.
java.util.Date
,java.util.Calendar
иjava.text.SimpleTextFormat
теперь являются устаревшими, вытесненными java.time. См. учебник Oracle. - person Basil Bourque   schedule 22.07.2017