Java Дата / Календарь странность - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть немного (Java), где я пытаюсь просто вычесть 7 дней из текущей даты. Мне показалось, что Calendar.add (..) должен быть методом, который нужно использовать (и что, похоже, здесь говорят предыдущие вопросы), так что я попробовал:

SimpleDateFormat df = new SimpleDateFormat("dd-mm-yyyy");
GregorianCalendar cal = (GregorianCalendar) GregorianCalendar.getInstance();
System.out.println("ReportUtil.getDefaultReportStartDate cal: "+cal.toString() );
System.out.println("PRE ReportUtil.getDefaultReportStartDate: "+df.format(cal.getTime()) );
cal.add(Calendar.DATE, -7);
System.out.println("POST ReportUtil.getDefaultReportStartDate: "+df.format(cal.getTime()) );

Это выглядит нормально для меня, но вы увидите из вывода ниже поля месяца, кажется, немного ... в сторону! Кажется, день месяца / дата меняется правильно, но что происходит с месяцем?!

ReportUtil.getDefaultReportStartDate cal: java.util.GregorianCalendar[time=1330098699960,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GB-Eire",offset=0,dstSavings=3600000,useDaylight=true,transitions=242,lastRule=java.util.SimpleTimeZone[id=GB-Eire,offset=0,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2012,MONTH=1,WEEK_OF_YEAR=8,WEEK_OF_MONTH=4,DAY_OF_MONTH=24,DAY_OF_YEAR=55,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=51,SECOND=39,MILLISECOND=960,ZONE_OFFSET=0,DST_OFFSET=0]

PRE ReportUtil.getDefaultReportStartDate: 24-51-2012
POST ReportUtil.getDefaultReportStartDate: 17-51-2012

Ответы [ 3 ]

6 голосов
/ 24 февраля 2012

SimpleDateFormat df = new SimpleDateFormat ("dd-mm-yyyy");

Вы получаете странное значение месяца, потому что mm означает минуты.Попробуйте:

 SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");

Полный список символов формата вы можете посмотреть здесь: http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

4 голосов
/ 24 февраля 2012

мм - строка формата для Минуты. Вы хотите ММ

2 голосов
/ 24 февраля 2012

Ваш результат кажется правильным.

Месяц "1" в обеих датах вашей первой строки журнала означает февраль.

"-mm-" в вашем SimpleDateFormat означает минуту, а не месяц, поэтому нечетный месяц "51"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...