日历添加行为
Posted
技术标签:
【中文标题】日历添加行为【英文标题】:Calendar add behaviour 【发布时间】:2013-06-11 14:34:22 【问题描述】:想要获取下周的第一天(下周一),但调用 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
【问题讨论】:
【参考方案1】:这是一个很好的例子...
Calendar
不好处理。你的问题是日期的评估。
Calendar
的日期是新评估的,如果您调用例如getTime()
或 add()
。
在第二个(正确的)示例中,您在设置一周的第一天后调用getTime()
,并将日历设置为2013-06-06
。之后,您更改星期几并设置新日历(通过getTime()
)。因此现在设置为星期一。
在第一个示例中,您将Calendar
设置为日期并设置星期几。这会导致无效日期(暂时)。 2013-06-06
是星期四,而您设置为星期一。现在哪一天是正确的星期几? Calendar
实现现在选择星期四。
这也是 Javadoc 中的 well documented。该部分名为日历字段分辨率。
【讨论】:
以上是关于日历添加行为的主要内容,如果未能解决你的问题,请参考以下文章