0

想要获取下周的第一天(下周一),但调用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
        }
    }
}
4

1 回答 1

0

这是一个很好的例子......

Calendar处理起来并不容易。你的问题是日期的评估。

Calendar如果您调用 eggetTime()或,则新评估的日期add()

在第二个(正确的)示例中,您getTime()在设置一周的第一天并且日历设置为之后调用2013-06-06。之后,您更改星期几并设置新日历(通过getTime())。因此现在设置为星期一。

在第一个示例中,您将 设置Calendar为日期并设置星期几。这会导致无效日期(暂时)。2013-06-06是星期四,你设置星期一。现在哪一天是正确的星期几?实施现在Calendar选择星期四。

这在 Javadoc中也有很好的记录。该部分名为Calendar Fields Resolution

于 2013-06-11T15:02:31.617 回答