您好,匿名用户
随意问技术百科期待您的加入

JAVA Calendar 获取年份与周数

+1 投票

输入一个字符日期,通过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年的第一周。

直接通过 cl.ge(Calendar.YEAR),得到2012,我怎么获取2013年呢?

想要的结果其实是:输入2012-12-31,能得到是2013年的第 1 周。

用户头像 提问 2012年 12月31日 @ Saber 中士 (1,234 威望)
分享到:

1个回答

+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月31日 @ Jax 上等兵 (324 威望)
选中 2012年 12月31日 @Saber
提一个问题:

相关问题

0 投票
1 回复 16 阅读
用户头像 提问 2014年 3月7日 @ Annie 上等兵 (299 威望)
0 投票
1 回复 60 阅读
用户头像 提问 2012年 12月1日 @ Ezreal 上等兵 (266 威望)
0 投票
1 回复 48 阅读
0 投票
1 回复 27 阅读
用户头像 提问 2012年 12月1日 @ Apple 上等兵 (542 威望)
+2 投票
1 回复 107 阅读
用户头像 提问 2013年 2月22日 @ Rumble 上等兵 (394 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...