展开全部

计算一年有多少个周的636f707962616964757a686964616f31333337393632思路:首先,每年至少有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());

}

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

java 一年 周数_java获取一年共有多少周相关推荐

  1. java 两日期的周数_java – 获取两个日期之间的周数.

    我在一个项目中工作,我在Date中有两种类型.我想计算这两个日期之间的星期数.日期可能在不同的年份.有没有什么好的解决方案呢? 我试图用Joda-time来实现这一点,这在其他主题中被提出. 我不喜欢 ...

  2. java 年 周数_Java如何显示一年的周数?

    在Java中,如何查找一年中或一个月中的第几个星期? 以下示例显示年份和月份的第几周. package com.yiibai; import java.util.*; public class Dis ...

  3. java 一周前日期_java获取当前时间前一周、前一月、前一年的时间

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c = Calend ...

  4. php 获取月份的周数,PHP获取当前月份的周数只能使用php

    这里是我的周数组.当月和年2017年,我想下面的代码,PHP获取当前月份的周数只能使用php function getWeekDates($date, $start_date, $end_date) ...

  5. 获取自然周;一年中总的周数,以及当前日期处于第几周

    https://dayjs.fenxianglu.cn/ 插件 主要代码: let year = dayjs().year() // 默认今年 let date = dayjs().format('Y ...

  6. java 获取秒数_Java获取精确到秒的时间戳(转)

    1.时间戳简介: 时间戳的定义:通常是一个字符序列,唯一地标识某一刻的时间.数字时间戳技术是数字签名技术一种变种的应用.是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01 ...

  7. java 获取当前是周几_java 获取今天(某一天)是星期几/周几

    [public class GetDayOfWeek{ public static void main(String args[]){ final String dayNames[] = { &quo ...

  8. java取上一个月_java获取当前上一周、上一月、上一年的时间

    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c=Calendar ...

  9. 获取昨天凌晨毫秒数_Java 获取当前时间距离当天凌晨的秒数

    在前期项目中遇到一个客户端与服务器间的时间同步问题,需要获取到当前时间与当天凌晨时间距离的秒数,写这篇文章主要是为了总结一下经验提升方便日后温习,以下是具体的测试代码: Junit的maven依赖: ...

  10. java统计系统线程数_Java并发(八)计算线程池最佳线程数

    目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...

最新文章

  1. 什么是DCI? 它有什么用?
  2. CCF201612-3 权限查询(100分)
  3. [转贴] C++内存管理检测工具 Valgrind
  4. 我就想要个两年1024徽章~!
  5. python爬虫能干啥-Python爬虫还能干什么?
  6. opencv 标记有数字的区域
  7. python工具栏消失_[Python自学] PyQT5-菜单栏、工具栏、状态栏
  8. js设计一个带开关的时钟_数电题:三个按键一个灯
  9. Eclipse 插件之间互相依赖, 导出Jar包安装, 报错“java.lang.NoClassDefFoundError”
  10. Mac 下修改eclipse内存设置
  11. 实验吧-杯酒人生(凯撒解密,维基利亚密码)
  12. vite创建vue保姆级教程
  13. 非结构化数据的定义及处理方法
  14. 有道云笔记设置界面 占满全屏(右侧)
  15. .NET应用程序 全局RGB效果(VB.NET示例)
  16. wcp知识库系统的安装
  17. 知了堂笔记之html+CSS动画万花筒
  18. vs2015+qt国际化翻译问题:Linguist中源代码不可见
  19. 软件开发应届生求职经验(其他专业可参考)
  20. 2022年湖北恩施安全员ABC报考条件是什么?甘建二

热门文章

  1. ArcGIS为什么计算面积被禁用
  2. 51单片机汇编语言例子,涵盖数码管显示,流水灯,串口,外拓,电子钟,频率计,DA、AD转换等实例
  3. imageJ下载 安装插件
  4. 基于flask实现疫情可视化监控系统
  5. 单机游戏合集!12000G!淘宝购!
  6. 详细解析单片机控制继电器原理图以及其作用
  7. WinCE开发流媒体播放器--MPEG4
  8. 电脑课学生端密码查看
  9. dell N4050声卡驱动安装后仍然没有声音,改装XP完美驱动IDT声卡!实测可用!
  10. 《和平精英》枪械怎么搭配最无敌?大神竟然都爱平底锅?