У меня есть следующий фрагмент кода.
@Override
public String toString() {
try {
String calString = "Sat Sep 27 00:00:00 EDT 2014";
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z YYYY");
System.out.println("calString " + calString);
Date date = formatter.parse(calString);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println("month " + calendar.get(Calendar.MONTH));
System.out.println("day " + calendar.get(Calendar.DAY_OF_MONTH));
DateFormat df = new SimpleDateFormat("YYYYMMdd");
System.out.println("format date" + df.format(date));
return df.format(date);
} catch (ParseException ex) {
return null;
}
}
Ожидаемый результат должен быть 20140927
но я получаю это вместо этого.
calString Sat Sep 27 00:00:00 EDT 2014
month 0
day 3
format date 20140103
Кто-нибудь знает, почему день и месяц ушли?
Y
представляет собой недельный год. y
используется для сопоставления года
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
Вы используете YYYY
вместо yyyy
. Это означает "недельный год", который будет использоваться в сочетании с "неделей года". Просто измените YYYY
на yyyy
в обоих конструкторах SimpleDateFormat
и вы получите результат:
calString Sat Sep 27 00:00:00 EDT 2014
month 8
day 27
format date20140927
Обратите внимание, что месяц составляет 8, а не 9, потому что месяцы в java.util.Calendar
основаны на 0.
Немного более здоровое решение
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"
,Locale.ENGLISH);