SimpleDateParser выдает неверную дату? - PullRequest
3 голосов
/ 29 июля 2010

Доброе утро! Последние два часа я работал со следующим фрагментом кода, обыскивая форумы, документы Google и JDK 1.6, чтобы понять, что происходит, но, похоже, это не сработает. Я ожидаю, что код будет выводиться 25.07.2010 23:59:33, но вместо этого я получу 25.01.2010 23:59:33.

String dateString = "07/25/2010 11:59:33 PM";
DateFormat format = new SimpleDateFormat("MM/DD/yyyy hh:mm:ss a");
Date testDate = format.parse( dateString );

System.out.println(format.format(testDate));

Думая, что это может быть связано с JDK, я попытался написать то же самое, используя Joda-Time, и получил те же результаты. Я что-то упустил из-за того, как работает DateFormat?

Заранее благодарим вас за любые идеи, которые вы можете предоставить!

Ответы [ 3 ]

3 голосов
/ 29 июля 2010

Проблема в том, что в вашей строке формата "DD" - это должно быть "dd".

«ДД» означает «день года» ... так что вы говорите о 25-м дне года, но в июле месяце ... «день года» имеет приоритет, поэтому вы вместо 25 января.

1 голос
/ 29 июля 2010

DD означает день в году, как в юлианский день .Юлианский день может описать любой день в году, поэтому месяц игнорируется.Вместо этого используйте dd (день в месяце), и вы получите правильный результат.

0 голосов
/ 29 июля 2010

Вы должны позаботиться о проблемах с регистром для форматера. Они немного странно организованы.

Попробуйте с

DateFormat format = new SimpleDateFormat("MM/DD/yyyy hh:mm:ss a");

РЕДАКТИРОВАТЬ: DD означает день в году, dd = день в месяце

Ссылаясь на API JAVA 1.6 SimpleDateFormat

...