2012-02-24 9 views
0

私は現在の日付から7日を差し引くことを私がしている(Java)ビットがあります。 Calendar.add(..)はそれは私が試したものですので、この方法を使用する(とここで何前回の質問が言っているように見える)でなければなりませんように私には思えた。私が、あなた」にOKになりますJavaの日付/カレンダーの奇妙さ

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 

答えて

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

+0

ビンゴのように奇数月を意味します!どうもありがとう。 – DaFoot

4

mmは分のフォーマット文字列です。 MM

2

あなたの結果が正しいように思えます。

月は、最初のログ行の両方の日付で「2」を意味します。

「-mm-」あなたSimpleDateFormatでは分からない、月、「51」