计算某一年第一天星期几java_JAVA 计算某年某周的第一天和最后一天

2019-01-04 回答

计算一年有多少个周的思路:首先,每年至少有52个周,至多有53个周,取决于周一是在哪年(也可以定位周日,这个是由需求决定的),以下是详细代码,其中判断哪一天决定了当周是属于哪一年的逻辑是写在getyearweekendday中。 /** * 返回指定年度的所有周。list中包含的是string[2]对象 * string[0]本周的开始日期,string[1]是本周的结束日期。 * 日期的格式为yyyy-mm-dd。 * 每年的第一个周,必须包含星期一且是完整的七天。 * 例如:2009年的第一个周开始日期为2009-01-05,结束日期为2009-01-11。 * 星期一在哪一年,那么包含这个星期的周就是哪一年的周。 * 例如:2008-12-29是星期一,2009-01-04是星期日,哪么这个周就是2008年度的最后一个周。 * * @param year 格式 yyyy ,必须大于1900年度 小于9999年 * @return */ public static list getweeksbyyear(final int year){ if(year<1900 || year >9999){ throw new nullpointerexception("年度必须大于等于1900年小于等于9999年"); } //实现思路,首先计算当年有多少个周,然后找到每个周的开始日期和结束日期 // calendar calendar = new gregoriancalendar(); // // 在具有默认语言环境的默认时区内使用当前时间构造一个默认的 gregoriancalendar。 // calendar.setfirstdayofweek(calendar.monday); //设置每周的第一天为星期一 // calendar.set(calendar.day_of_week, calendar.monday); //每周从周一开始 // 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。 // calendar.setminimaldaysinfirstweek(7); //设置每周最少为7天 // calendar.set(calendar.year, year); // 设置年度为指定的年 // //首先计算当年有多少个周,每年都至少有52个周,个别年度有53个周 int weeks = getweeknumbyyear(year); // system.out.println(year+"共有"+weeks+"个周"); list result = new arraylist(weeks); for(int i=1;i<=weeks;i++){ string[] tempweek = new string[2]; tempweek[0] = getyearweekfirstday(year,i); tempweek[1] = getyearweekendday (year,i); //或者使用下面的代码,不过发现效率更低 // tempweek[0] = getdateadd(firstweekday,(i-1)*7+0); // tempweek[1] = getdateadd(firstweekday,(i-1)*7+6); result.add(tempweek); // system.out.println(i+"="+tempweek[0]+"_"+tempweek[1]); } return result; } /** * 计算指定年度共有多少个周。 * @param year 格式 yyyy ,必须大于1900年度 小于9999年 * @return */ public static int getweeknumbyyear(final int year){ if(year<1900 || year >9999){ throw new nullpointerexception("年度必须大于等于1900年小于等于9999年"); } int result = 52;//每年至少有52个周 ,最多有53个周。 string date = getyearweekfirstday(year,53); if(date.substring(0, 4).equals(year+"")){ //判断年度是否相符,如果相符说明有53个周。 result = 53; } return result; } /** * 计算某年某周的开始日期 * @param yearnum 格式 yyyy ,必须大于1900年度 小于9999年 * @param weeknum 1到52或者53 * @return 日期,格式为yyyy-mm-dd */ public static string getyearweekfirstday(int yearnum,int weeknum) { if(yearnum<1900 || yearnum >9999){ throw new nullpointerexception("年度必须大于等于1900年小于等于9999年"); } calendar cal = calendar.getinstance(); cal.setfirstdayofweek(calendar.monday); //设置每周的第一天为星期一 cal.set(calendar.day_of_week, calendar.monday);//每周从周一开始 // 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。 cal.setminimaldaysinfirstweek(7); //设置每周最少为7天 cal.set(calendar.year, yearnum); cal.set(calendar.week_of_year, weeknum); //分别取得当前日期的年、月、日 return getformatdate(cal.gettime()); } /** * 计算某年某周的结束日期 * @param yearnum 格式 yyyy ,必须大于1900年度 小于9999年 * @param weeknum 1到52或者53 * @return 日期,格式为yyyy-mm-dd */ public static string getyearweekendday(int yearnum,int weeknum) { if(yearnum<1900 || yearnum >9999){ throw new nullpointerexception("年度必须大于等于1900年小于等于9999年"); } calendar cal = calendar.getinstance(); cal.setfirstdayofweek(calendar.monday); //设置每周的第一天为星期一 cal.set(calendar.day_of_week, calendar.sunday);//每周从周一开始 // 上面两句代码配合,才能实现,每年度的第一个周,是包含第一个星期一的那个周。 cal.setminimaldaysinfirstweek(7); //设置每周最少为7天 cal.set(calendar.year, yearnum); cal.set(calendar.week_of_year, weeknum); return getformatdate(cal.gettime()); }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值