展开全部

计算一年有多少个周的思路:首先,每年至少有52个周,至多有53个周,取决于周一是在62616964757a686964616fe58685e5aeb931333361323534哪年(也可以定位周日,这个是由需求决定的),以下是详细代码,其中判断哪一天决定了当周是属于哪一年的逻辑是写在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());

}

本回答由网友推荐

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java 一年有多少周_用java怎么计算当前年有多少周相关推荐

  1. 【源码+图片素材】Java王者荣耀游戏开发_开发Java游戏项目【王者荣耀】1天搞定!!!腾讯游戏_Java课程设计_Java实战项目_Java初级项目

    王者荣耀是当下热门手游之一,小伙伴们是否想过如何制作一款属于自己的王者荣耀游戏呢? 本课程讲解了一个王者荣耀游戏的详细编写流程,即使你是刚入门Java的新手,只要你简单掌握了该游戏所需要的JavaSE ...

  2. java 当前日期 所在周_关于Java的小工具(计算当前日期所在周的区间)

    1.2.计算指定格式日期的当前周和前后周的起止时间 入参:date类型,或者当前系统时间 返回:当前时间的所在周的起止日期,和前后一周的起止日期 /** * 此方法为:根据当前日期获得所在周的日期区间 ...

  3. java形参列表怎么理解_关于Java中形参与实参的理解

    今天阅读了一个写的非常棒的博文,通过此博文再次复习了Java中参数传递的知识(即值传递与引用传递的区别).参考网站http://www.cnblogs.com/binyue/p/3862276.htm ...

  4. java的关键字和保留字_「Java」详解常见的53个关键字

    1.在Java中目前一共有53个关键字: 其中由51+2个保留字=53个关键字 [友情提示 : Java的关键字都是小写哟] 2.Java的保留字有多少个?分别是什么? 答:Java的保留字有2个,J ...

  5. java数组给名字排序_用Java给数组排序

    public class BubbleDemo { public static void main(String[] args) { int arr[]={1,3,5,7,2,4,6,8,9}; bu ...

  6. java课后习题七解析_《Java基础入门》_课后习题解析.doc

    <Java基础入门>_课后习题解析 <Java基础入门>课后习题 Java开发入门 一.填空题 1.Java的三大体系分别是_JavaSE_____._JavaEE_____. ...

  7. java中的dispose函数_[转载]java中的dispose()方法

    这是我第100篇IT技术文章,也正好让我实现了一个完整的从客户端输入参数,使用遗传算法计算生产排程的实例,前端由客户输入种群大小,遗传代数,交叉概率,变异概率,零件数,机器数,时间矩阵,机器矩阵,经运 ...

  8. java jsp取静态常量_获取java静态

    Android NDK开发系列教程4:对类变量进行操作 终于建了一个自己个人小站:https://huangtianyu.gitee.io,以后优先更新小站博客,欢迎进站,O(∩_∩)O~~ 通常我们 ...

  9. java课后习题及答案_《java基础入门》课后习题及答案.doc

    <java基础入门>课后习题及答案.doc <Java 基础入门>课后习题及答案博学谷--让 IT 教学更简单,让 IT 学习更有效<Java 基础入门> 课后习题 ...

  10. java基础入门课后习题_《Java基础入门》课后习题及答案

    <Java基础入门>课后习题及答案Java基础入门,课后习题,答案 博学谷--让IT教学更简单,让IT学习更有效 <Java基础入门>课后习题 第1章Java开发入门 一.填空 ...

最新文章

  1. [Linux]F5负载均衡器
  2. java,如何处理大批量数据插入
  3. 58 - 算法 - 百练 2503:Babelfish 二分查找与存储
  4. httpclient工具类,使用连接池实现
  5. CentOS Docker环境部署NextCloud
  6. CI框架精简版教程 最快上手
  7. R 语言 中的条件推理树
  8. 富媒体超级短信(多媒体短信、视频短信)亮点、应用场景
  9. Utility.java的使用方法及家庭记账程序的制作
  10. lisp方格网法计算土方量_CASS方格网法如何计算土方量
  11. ORAN C平面 Section Type 3
  12. js-最常用的js表单校验1
  13. 弹跳蚂蚱 Jumping Grasshopper
  14. vuepress引入外部组件后build报错window is not defined
  15. 计算机程序员求职信英语作文,英文程序员求职信
  16. centos6.5卸载图形界面
  17. 2022年智源社区年度热点推荐丨新春集锦
  18. 浅聊下后台管理系统权限控制的实现思路
  19. 0 0/1 * * * ?
  20. 域名解析——原理与意义

热门文章

  1. 车载以太网和工业以太网区别
  2. python 修改照片分辨率
  3. ACM河南第八届省赛题
  4. Activity焦点
  5. 网站服务器域名费用入什么科目,企业域名服务费记什么科目
  6. [VS code - SSH Remote] ln: failed to create hard link ... File exists
  7. MBBR 物联网大数据监控系统
  8. 退出登录如何清除token
  9. 无法更改硬件兼容性时解决“虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本”的方法
  10. 3d建模和计算机专业对口吗,学3d建模有学历门槛吗