Синтаксический анализ SimpleDateFormat для формата DTG

#simpledateformat

#simpledateformat

Вопрос:

Я действительно смущен объектом SimpleDateFormat. Вот код :

 SimpleDateFormat formatter = new SimpleDateFormat("DDHHmm MMM yy", Locale.ENGLISH);

String dateString = "312230 MAR 10";
try 
{
    Date date = (Date)formatter.parse(dateString);
    System.out.println("Original string: "   dateString);
    System.out.println("Parsed date    : "   date.toString());
}
catch (ParseException e) 
{
    System.out.println("ERROR: could not parse date in string ""  
                dateString   """);
}
  

и это вывод :

 Original string: 312230 MAR 10
Parsed date    : Sun Jan 31 22:30:00 EST 2010
  

Я действительно ожидал, что результат будет

 Parsed date    : Wed Mar 31 22:30:00 EST 2010
  

Может кто-нибудь, пожалуйста, указать, что я делаю неправильно? Это было бы глубоко оценено. Я использую java 1.6_27.

Ответ №1:

Измените шаблон SimpleDateFormat на «ddHHmm MMM yy», возвращающий ожидаемый результат

 Original string: 312230 MAR 10
Parsed date    : Wed Mar 31 22:30:00 CEST 2010
  

DD в верхнем регистре означает день года. В вашем примере день 31 приходится на январь, как ваш вывод, а не на март

Комментарии:

1. Я знал, что это должно быть что-то глупое. Большое вам спасибо за ответ.

Ответ №2:

В SimpleDateFormat :

D представляет день в году.Например,- 31 в качестве значения DD даст вам 31-й день с 1-го Jan.So , 31-й день года, начинающийся с 1 января, будет 31 января.

d представляет день в месяце.Например, если в качестве значения dd задано значение 31, а MMM равно MAR, то это будет 31 мая.

Подробнее в SimpleDateFormat.