2016-08-25 5 views
0

У меня вопрос относительно Class SimpleDateFormat. Я хочу преобразовать формат строки даты. дата является 21.11.2011, и я хочу, чтобы быть преобразованы в 111121.Java SimpleDateFormat parsing нечетный результат

Это мой код:

public class Main { 

private static final SimpleDateFormat oldSimpleDateFormat = new SimpleDateFormat("dd.MM.YYYY"); 
private static final SimpleDateFormat newSimpleDateFormat = new SimpleDateFormat("YYMMdd"); 
private static String oldDate = "21.11.2011"; 
private static Date myDate = oldSimpleDateFormat.parse(oldDate, new ParsePosition(0)); 
private static String newDate = newSimpleDateFormat.format(myDate); 

public static void main(String[] args){ 
    System.out.println(myDate); 
    System.out.println(newDate); 
} 
} 

Результаты в пульту пн 3 января 00:00:00 CET 2011 и 110103. Таким образом, часть форматирования работает правильно, но парсинг не так, как ожидалось.

+0

Ввод текста String oldDate, который содержит 21.11.2011 – Benjamin

ответ

1

Вы используете YYYY (в верхнем регистре), когда вы должны использовать yyyy (в нижнем регистре).

Y означает «Недельный год». y означает «год».

+0

Да, это все. Большое спасибо! – Benjamin

+0

Пожалуйста, просто VTC. Вот возможный дубликат: http://stackoverflow.com/questions/27739514/simpledateformatdd-mmm-yyyy-printing-year-one-year-ahead?noredirect11&lq=1 –

+0

Хм .. интуитивно вы предположили бы, что используя 'YYYY 'не имеет значения, потому что конкретная дата так далека от конца года. Обычно вы видите эти ошибки с конца декабря или начала январских дат (как в случае с предлагаемым дубликатом). –

0

Проверьте javadoc для SimpleDateFormat. Обычно это проблема с прописными или строчными буквами, используемыми для разных вещей. В этом случае верхний регистр Y относится к «недельному году» (независимо от того, что есть), а нижний регистр y относится к «году». Измените Y на y, и это сработает.

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