想要获得下周的第一天(下周一),但致电getTime()
会更改日历对象。
请告诉我获得下周第一天的正确方法。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Main {
public static void main(String[] args) {
{
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
final Calendar cal = new GregorianCalendar( 2013, 5, 6 );
cal.setFirstDayOfWeek( Calendar.MONDAY );
//System.out.println( sdf.format( cal.getTime() ) );
cal.set( Calendar.DAY_OF_WEEK, Calendar.MONDAY );
System.out.println( sdf.format( cal.getTime() ) ); // 2013-06-06
cal.add( Calendar.WEEK_OF_YEAR, 1 );
System.out.println( sdf.format( cal.getTime() ) ); // 2013-06-13
}
{
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
final Calendar cal = new GregorianCalendar( 2013, 5, 6 );
cal.setFirstDayOfWeek( Calendar.MONDAY );
System.out.println( sdf.format( cal.getTime() ) ); // 2013-06-06
cal.set( Calendar.DAY_OF_WEEK, Calendar.MONDAY );
System.out.println( sdf.format( cal.getTime() ) ); // 2013-06-03
cal.add( Calendar.WEEK_OF_YEAR, 1 );
System.out.println( sdf.format( cal.getTime() ) ); // 2013-06-10
}
}
}
答案 0 :(得分:0)
这是一个很好的例子......
Calendar
并不容易处理。你的问题是评估日期。
如果您致电Calendar
,则会重新评估getTime()
的日期add()
或getTime()
。
在第二个(正确的)示例中,您在设置一周的第一天后调用2013-06-06
,日历设置为getTime()
。之后,您可以更改星期几并将日历设置为新(通过Calendar
)。因此现在设置为星期一。
在第一个示例中,您将2013-06-06
设置为日期并设置星期几。这导致无效日期(暂时)。 Calendar
是星期四,你设定星期一。现在哪一周是正确的一周? {{1}}实施现在选择星期四。
这在Javadoc中也是well documented。该部分名为日历字段分辨率。