输入一个字符日期,通过Calendar 获取 到日期对应的周数及 周所在的年份
特别是跨年的情况:
先贴代码
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cl = Calendar.getInstance();
cl.setTime(sdf.parse("2012-12-31"));
int week = cl.get(Calendar.WEEK_OF_YEAR);
System.out.println(week);
结果是 1 这个没有疑问.
这个1 明显是2013年的第一周 我怎样也能获取到 2013呢
直接通过 cl.ge(Calendar.YEAR); 得到2012
想要的结果其实 是:
输入2012-12-31
能得到 是 2013 年 的第 1 周
采纳的答案
这是Calendar的内部机制的问题,根据正常的逻辑,它是没有错的,你想得到2013年第1周,应该去做一下判断,因为2012-12-31确实是2012年,它不是2013年,所以要做一下处理,得到周数之后,可以根据7天前的周数来做一下对比,如果7天前的周数小于当日周数,则表示为正常周数和正常年份,如果7天前的周数大于当日周数,表示当日在年尾,并且当日周数被计算在下一年,此时要在得到的年份是+1,下边是代码,你自己看看理解一下吧。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cl = Calendar.getInstance();
cl.setTime(sdf.parse("2012-12-31"));
int week = cl.get(Calendar.WEEK_OF_YEAR);
System.out.println(week);
cl.add(Calendar.DAY_OF_MONTH, -7);
int year = cl.get(Calendar.YEAR);
if(week<cl.get(Calendar.WEEK_OF_YEAR)){
year+=1;
System.out.println(year+"年第"+week+"周");
2012年12月29日 08:39
shuaijie506
int year = 0;
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setTime(date);
int weekNo = calendar.get(Calendar.WEEK_OF_YEAR);
int year1 = calendar.get(Calendar.YEAR);
calendar.add(Calendar.DAY_OF_MONTH, -7);
int year2 = calendar.get(Calendar.YEAR);
int weekBefore = calendar.get(Calendar.WEEK_OF_YEAR);
if(weekNo<weekBefore){
year2+=1;
year = year2;
}else{
year = year1;
}
System.out.println(year+"年第"+weekNo+"周");
2019年1月18日 17:25
以king之名
这个week_of_year和两个值有关。
firstDayOfWeek: 用周几作为一周的第一天,我们默认的是SUNDAY,德国的是周三(这个和本地化有关)
minimalDaysInFirstWeek: 一年的第一周用几号开始算。
System.out.println(cl.getFirstDayOfWeek()); //SUNDAY
System.out.println(cl.getMinimalDaysInFirstWeek());//1
打印出来的结果是从周日开始做为1周的开始,新年的第一天从1号开始。
2012年最后几天的日历如下:
周日 1 2 3 4 5 6
30号 31 1[size=medium][/size] 2 3 4 5
新年的第一天是1号(minimalDaysInFirstWeek)在周二,一周必须由7天组成,又是从周日(firstDayOfWeek)开始算起,所以30,31都属于第1周就等到了楼主说的结果。
要跟这个原理可以分别修改这两个属性可以提到不同的结果。
方法1:
cl.setFirstDayOfWeek(Calendar.TUESDAY);
修改每周从周二开始,而周2正好是1号,所以12-31的week值为53
方法2:
cl.setMinimalDaysInFirstWeek(6);
修改新年从6号开始算起,6号正好是周日,一周的开始,所以6号前的7天的week值都是53.
2012年12月28日 22:50
Bo6Bear