int year = calendar.get(1);
int month = calendar.get(2) + 1;
int day = calendar.get(5);
int weekIndex = calendar.get(4);
int dayIndex = calendar.get(7);
boolean isFirstSunday = calendar.getFirstDayOfWeek() == 1;
if (isFirstSunday) {
dayIndex -= 1;
if (dayIndex == 0)
dayIndex = 7;
}
这个canlendar给它传一个long类型的日期,为什么get(2)获取的月份是七月 ,现在是八月,还有这个get(4)和(7)得出来的值是每周的第一天和每月的第一周吗? 这个getfirstdayofweekAPI说是返回一周的第一天,那么返回值除了1还有别的值?最后请大神讲解下那个判断和赋值,为什么一周的第一天是一 就需要dayindex减去一天? 我快疯了
首先第一个问题:在java JDK中 Calender 这个日历类中,get(int field) 返回给定日历字段的值。API中定义一个关于月份常量这样定义的:
public final static int MONTH = 2;
上面你的calender.get(2),就相当于Calender.get(Calender.MONTH)就是说是当前的月份减1 所以便+上1,就是当前的月份数
第二个?:get(4)中的4 表示的是Calender.WEEK_OF_MONTH 返回的是当天是这个月的第几周~~~ API定义为: public final static int WEEK_OF_MONTH = 4;
get(5) 5表示:Calender.DATE 返回今天是这个月的第几天~~~ public final static int DATE = 5;
get(7) 7表示:Calender.DAY_OF_WEEK 返回今天是这个星期的第几天(从周日为第一天计算)~~~ public final static int DAY_OF_WEEK = 7;
第三个问题:calendar.getFirstDayOfWeek() 这个返回的值为1,是根据美国的时间来指定的,相当于API中默认的calendar.setFirstDayOfWeek(Calendar.SUNDAY); 这个方法,Calendar.SUNDAY 值为1的,其中如果将其改变成你自己的默认值calendar.setFirstDayOfWeek(2);时,
你的到calendar.getFirstDayOfWeek() 的值就是为2了!!!明白了么,其实看看API都都能懂得。
好多是从0开始计数的
http://blog.csdn.net/joyous/article/details/9630893
get(n):n=1 返回年;n=2返回月(按0-11表示,所以加1);dayindex表示一周的第几天,默认周日是第一天,以此类推,最后的处理就是想调整为周日为第七天,周一为第一天。
int getFirstDayOfWeek()
获取一星期的第一天;例如,在美国,这一天是 SUNDAY,而在法国,这一天是 MONDAY。
为什么get(2)获取的月份是七月 ,现在是八月:
反人类设计,计数从 0 开始,0,1,2,3...;对应 1,2,3,4...刚接触 c语言时就有人讲过吧就是这个意思,规定没办法;
Calendar 的 month 从 0 开始,也就是全年 12 个月由 0 ~ 11 进行表示。所以要 +1;
那个week 周一到周日对应,2,3,4,5,6,7,1;周日对应第一个数
1:2016 年
2:7 月8 = 7+1
3:32
4:1 每月的第几周
5:6 6 号
6:219 第219 tia
7:7 一周的第几天
其实你没必要这样记,像这样用的也不常见
System.out.println(calendar.get(Calendar.DATE));
int dayOfMonth= calendar.get(Calendar.DAY_OF_MONTH);//今天是这个月的第几天
int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);//今天是这一周的第几天
类似的好理解也好记,Calendar.DAY_OF_WEEK,
calendar.get(Calendar.MONTH);
calendar.get(Calendar.HOUR_OF_DAY);
calendar.get(Calendar.HOUR);
在法国,这一天是 MONDAY。