2013-04-09 3 views
2

У меня есть дата в 4 цифры. Я наткнулся на входные данные после 2050 года. В моей заявке "0150" означает January 01 2050. Но когда я форматирую, он возвращает следующий результат.Почему отформатированная дата датируется предыдущим столетием

Sun Jan 01 00:00:00 PKT 1950 




public static Date getFormatDate(String newformat, String dateValue) throws Exception { 

     try { 

      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(newformat); 
      java.util.Date newdate = simpleDateFormat.parse(dateValue); 
      return newdate; 
     } 
     catch(Exception e) { 
      System.out.println("Exception in converting date format --->" + e); 
      throw e; 
     } 
    } 

    public static void main(String[] args) throws Exception {   
     System.out.println(getFormatDate("MMyy", "0150")); 
    } 

Любая помощь в решении этой проблемы будет высоко оценена.

+2

Это только 2013 год, и люди уже пытаются урезать столетие снова? – CPerkins

ответ

6

В соответствии с API documentation, SimpleDateFormat анализирует поля двухзначного года, так что результат «в течение 80 лет до и через 20 лет после создания экземпляра SimpleDateFormat».

Если вы хотите изменить поведение, чтобы лучше соответствовать вашему требованию, вы можете использовать метод set2DigitYearStart, чтобы установить начало 100-летнего периода, в который отображаются ваши даты.

5

От SimpleDateFormat Javadoc:

Для разбора с сокращенным годом рисунком («у» или «уу»), SimpleDateFormat должен интерпретировать сокращенный год относительно некоторую века. Это делается путем корректировки дат в течение 80 лет до и 20 лет с момента создания экземпляра SimpleDateFormat.

В вашем случае 1950 год находится в течение 80 лет до сегодняшнего дня.

Для того чтобы получить правильную дату (2050), вам необходимо позвонить в SimpleDateFormat.set2DigitYearStart(Date).

Смежные вопросы