Java日期/日历奇怪

时间:2012-02-24 15:56:36

标签: java date calendar

我有一点(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 个答案:

答案 0 :(得分:6)

  

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

答案 1 :(得分:4)

mm是Minute的格式字符串。你想要MM

答案 2 :(得分:2)

您的结果似乎是正确的。

第一个日志行的两个日期中的月份为“1”,即2月份。

SimpleDateFormat中的“-mm-”表示分钟而非月份,因此奇数月份为“51”