计算一年有多少个周,每个周的开始日期和结束日期是什么
时间:2019-02-19
本文章向大家介绍计算一年有多少个周,每个周的开始日期和结束日期是什么,主要包括计算一年有多少个周,每个周的开始日期和结束日期是什么使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/** * 返回指定年度的所有周。List中包含的是String[2]对象<br> * string[0]本周的开始日期,string[1]是本周的结束日期。<br> * 日期的格式为yyyy-MM-dd。<br> * 每年的第一个周,必须包含星期一且是完整的七天。<br> * 例如:2009年的第一个周开始日期为2009-01-05,结束日期为2009-01-11。 <br> * 星期一在哪一年,那么包含这个星期的周就是哪一年的周。<br> * 例如:2008-12-29是星期一,2009-01-04是星期日,哪么这个周就是2008年度的最后一个周。<br> * * @param year 格式 yyyy ,必须大于1900年度 小于9999年 * @return */ public static List<String[]> 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<String[]> result = new ArrayList<String[]>(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()); }
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何下载网页上的视频?
- c++ int,unsigned int混合表达式类型转换
- MySQL5.7+查看Waiting for table metadata lock 锁情况
- input如何快速进行规则校验
- 史上最详细的sqlServer手工注入详解
- Spring 基于 Java 的配置
- Spring中的Spring JSR-250 注释之@Resource
- python 用opencv接口把视频逐帧转化为图片
- Element el-tree树形控件的数据处理方法
- 基于docker快速搭建hive环境
- flag区分大小写的sql盲注
- Spring中的Spring JSR-250 注释
- WebRTC 入门指南
- 【DB笔试面试844】在Oracle中,tnsnames.ora文件的作用是什么?
- Spring 基于注解(annotation)的配置之@Qualifier注解