Как управлять синтаксическим анализом SimpleDateFormat до 19xx или 20xx?

Есть ли способ проанализировать следующую строку даты как July 23 1916, а не July 23 2016?

System.out.println(new SimpleDateFormat("yy/MM/dd", Locale.US).parse("16/07/23"));

person Jason    schedule 23.07.2014    source источник


Ответы (4)


Документ Java (http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) говорит:

Для синтаксического анализа с использованием сокращенного шаблона года ("y" или "yy") SimpleDateFormat должен интерпретировать сокращенный год относительно некоторого столетия. Для этого даты устанавливаются в пределах 80 лет до и 20 лет после создания экземпляра SimpleDateFormat. Например, при использовании шаблона «ММ/дд/гг» и экземпляра SimpleDateFormat, созданного 1 января 1997 г., строка «01/11/12» будет интерпретироваться как 11 января 2012 г., а строка «05/04/ 64" будет интерпретироваться как 4 мая 1964 года.

Метод SimpleDateFormat.set2DigitYearStart(Date) можно использовать для фиксации года.

person reto    schedule 23.07.2014

Если я понимаю ваш вопрос, то да,

SimpleDateFormat sdf = new SimpleDateFormat("yy/MM/dd", Locale.US);
Calendar cal = Calendar.getInstance(Locale.US);
cal.set(1900, 0, 1);
sdf.set2DigitYearStart(cal.getTime());
System.out.println(sdf.parse("16/07/23"));

Согласно SimpleDateFormat.set2DigitYearStart(Date) javadoc ,

Устанавливает 100-летний период. Двузначное число лет будет интерпретироваться как начало даты, указанной пользователем.

person Elliott Frisch    schedule 23.07.2014

Для этого можно использовать метод set2DigitYearStart. Он позволяет указать дату начала. Дата анализа будет находиться в интервале [дата начала, дата начала + 100 лет].

См. документацию для подробностей.

person Henry    schedule 23.07.2014

Может быть, вы ищете это.

    Calendar cal = Calendar.getInstance();
    cal.set( Calendar.YEAR, 1900 );
    SimpleDateFormat format = new SimpleDateFormat( "yy/MM/dd", Locale.US );
    format.set2DigitYearStart( cal.getTime() );
    System.out.println( format.parse( "16/07/23" ) );
person Swaraj    schedule 23.07.2014
comment
Для чего нужен календарь? - person AlexS; 23.07.2014
comment
установка года в формате date.set2DigitYearStart(cal.getTime()); - person Swaraj; 23.07.2014
comment
Вы не ошиблись, если используете Календарь, но этот ответ требует некоторой работы. - person Engineer2021; 23.07.2014
comment
какие изменения вы предлагаете. мне будет полезно иметь в виду на будущее. - person Swaraj; 23.07.2014
comment
Я бы вынул Может быть, вы ищете это .. Может быть, это один один, а не два. Ответ должен иметь достаточное объяснение того, что происходит. Вы ставите пробелы между круглыми скобками, но обычно это неодобрительный стиль. Если вы собираетесь поставить System.out.println, вам следует добавить еще одну строку, показывающую вывод примера. Если вы можете разместить рабочий пример на сайте онлайн-компилятора кода, таком как ideone, это будет очень полезно. Все это делается для того, чтобы ваш ответ выделялся и чтобы за него не проголосовали. stackoverflow.com/help/how-to-answer - person Engineer2021; 23.07.2014