Есть ли способ проанализировать следующую строку даты как July 23 1916
, а не July 23 2016
?
System.out.println(new SimpleDateFormat("yy/MM/dd", Locale.US).parse("16/07/23"));
Есть ли способ проанализировать следующую строку даты как July 23 1916
, а не July 23 2016
?
System.out.println(new SimpleDateFormat("yy/MM/dd", Locale.US).parse("16/07/23"));
В документе Java Doc (http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html) говорится:
Для синтаксического анализа с сокращенным шаблоном года ( "y" или "yy" ) SimpleDateFormat должен интерпретировать сокращенный год относительно некоторого века. Это делается путем корректировки дат в течение 80 лет до и 20 лет с момента создания экземпляра SimpleDateFormat. Например, используя шаблон "MM/dd/yy" и экземпляр SimpleDateFormat, созданный 1 января 1997 года, строка "01/11/12" будет интерпретирована как 11 января 2012 года, а строка "05/04/64" будет интерпретироваться как 4 мая 1964 года.
Метод SimpleDateFormat.set2DigitYearStart(Date)
можно использовать для фиксации года.
Если я понимаю ваш вопрос, то да,
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-летний период, состоящий из двухзначных лет, будет интерпретироваться как начинающийся с даты, указанной пользователем.
Для этого может использоваться метод set2DigitYearStart
. Он позволяет указать дату начала. Синтаксическая дата будет находиться в интервале [дата начала, дата начала + 100 лет].
Подробнее см. .
Возможно, вы ищете это.
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" ) );