小编最近的大数据采集项目,有一个按周统计的功能,业务讨论中就遇到了这样一个问题:每年的第一周怎么计算?

可能这么说有点懵,我们用实例来说明,如下:

实例:

以2020年的1月1日为例,当天是从周三开始的,这是跨年的一周。也就是说,元旦既是2019年的最后一周,也是2020年的第一周,那最终该如何归类?业务对数据展示的需求尤为严禁,如果不加考虑最后肯定会出问题,这就需要一个统一的标准。

注意:Calendar工具类中,每一周的第一天是周日,最后一天是周六!!

首先,对日期的处理,小编提倡必须必须使用Calendar工具类,先来看看它的默认处理:

public void testGetWeekNo() throws ParseException{DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");Calendar calendar = Calendar.getInstance();calendar.setTime(dateFormat.parse("2020-1-1"));int weekNo = calendar.get(Calendar.WEEK_OF_YEAR);System.out.println("第" + weekNo + "周");
}输出结果:第1周

意思就是说:Calendar工具类默认的第1周,就是元旦所在的那一周。

业务要求:

2020年时间占一周时间超过4天才算当年的第一周,否则算上一年的最后一周。

此时,我们就要用到Calendar工具类的 calendar.setMinimalDaysInFirstWeek(int num) 方法,处理如下:

public void testGetWeekNo() throws ParseException{DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");Calendar calendar = Calendar.getInstance();calendar.setMinimalDaysInFirstWeek(5);calendar.setTime(dateFormat.parse("2020-1-1"));int weekNo = calendar.get(Calendar.WEEK_OF_YEAR);System.out.println("第" + weekNo + "周");
}输出结果:第53周

意思就是说:2020-1-1元旦这一天,被算作了2019年的最后一周,即第53周。

我们再试试上面的代码,对2020-1-5(周日)如何定义:

public void testGetWeekNo() throws ParseException{DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");Calendar calendar = Calendar.getInstance();calendar.setMinimalDaysInFirstWeek(5);calendar.setTime(dateFormat.parse("2020-1-5"));int weekNo = calendar.get(Calendar.WEEK_OF_YEAR);System.out.println("第" + weekNo + "周");
}输出结果:第1周

意思就是说:再增加了 calendar.setMinimalDaysInFirstWeek(5) 处理以后,2020-1-5日开始的这一周被当做的2020年的第一周。

总结:

  1. Calendar工具类中,每一周的第一天是周日,最后一天是周六;
  2. Calendar工具类默认1月1日所在的周即为当年的第一周;
  3. 如果业务有需求,可以有选择的进行天数处理,使用calendar.setMinimalDaysInFirstWeek(int num)方法;
  4. 如果未定义calendar.setMinimalDaysInFirstWeek(int num)中的num值,Calendar将默认为1。

更多精彩,请关注我的"今日头条号":Java云笔记
随时随地,让你拥有最新,最便捷的掌上云服务

Java关于跨年周数计算的问题解释,以及解决办法(附代码+图)相关推荐

  1. oracle连续周数,详细讲解Oracle数据库的“周数计算”

    详细讲解Oracle数据库的"周数计算"以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! --日期计算 ...

  2. java 根据年月获取周数、天数

    java 根据年月获取周数.天数 大家好,我是酷酷的韩~ 1.根据年月获取周数 /*** @Description: 根据年月获取周数* @Param: [year, month]* @return: ...

  3. oracle 怎么计算年数,详细讲解Oracle数据库的“周数计算”

    详细讲解Oracle数据库的"周数计算" 2008-03-18 eNet&Ciweek 2)iw的算法为星期一至星期日算一周,且每年的第一个星期一为第一周, 例如20050 ...

  4. 文档计算机无法分页,同一EXCEL文件在不同计算机上显示分页不同解决办法(6页)-原创力文档...

    同一EXCEL文件在不同计算机上显示分页不同解决办法.DOC 同一EXCEL文件在不同计算机上显示分页不同解决办法 真正原因 (一)根本原因:电脑的dpi不同. (二)名词解释,dpi(dots pe ...

  5. java微信公众号开发token验证失败的问题及解决办法

    java微信公众号开发token验证失败的问题及解决办法 参考文章: (1)java微信公众号开发token验证失败的问题及解决办法 (2)https://www.cnblogs.com/beardu ...

  6. CFX计算报错和相应解决办法(浮点错误等-持续更新)

    CFX计算报错和相应解决办法(浮点错误等-持续更新) 1.CFX浮点错误 Floating point exception:Overflow 数值计算过大,浮点数位数不够,使用双精度double类型计 ...

  7. java不同的包下相同的类名的问题与解决办法

    java不同的包下相同的类名的问题与解决办法 参考文章: (1)java不同的包下相同的类名的问题与解决办法 (2)https://www.cnblogs.com/yanggb/p/10650256. ...

  8. keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect → 解决办法

    keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect → 解决办法 问题复现 我 ...

  9. Spring Boot整合Nacos时遇到 java.lang.IllegalStateException: Context has been already given a name 的解决办法

    问题概述 在进行项目开发过程中,通过Spring Boot整合Alibaba Nacos的服务注册与发现和配置中心时,遇到个梗,启动时打印出一串错误日志信息 " Failed to rena ...

  10. 【安全牛学习笔记】CSRF跨站请求伪造攻击漏洞的原理及解决办法

    CSRF跨站请求伪造攻击漏洞的原理及解决办法 CSRF,夸张请求伪造漏洞 漏洞的原理及修复方法 1.常见的触发场景 2.漏洞原理:浏览器同源策略 3.DEMO 4.漏洞危害 5.如何避免&修复 ...

最新文章

  1. cocos lua 加密方案
  2. 关于微博溯源的后续问题
  3. freemind的一个大bug,一周的数据啊
  4. 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
  5. 解决: Unable to connect to zookeeper server within timeout: 5000
  6. 解决Some index files failed to download.They have been ignored, or old ones used instead报错
  7. python基础练习题(按条件对指定序列求和,打印99乘法表、求斐波那契数列、百马百担、求水仙花数、求n以内的所有质数(素数)和)、集合的讲解、一些公关方法
  8. 为什么面试你要25K,测试总监只给你15K
  9. BI笔记之---BI通用流程zz
  10. 大数据可视化技术的作用有哪些
  11. pymysql.err.OperationalError: 1136, Column count doesn t match value count at row 1
  12. 本源量子计算机云平台,本源量子计算云平台
  13. [HAOI2009]毛毛虫 树形DP
  14. 吐槽大会 之博客园两个月使用体验
  15. Bugku Snowfall
  16. 用1元钱买到原价万元的电脑是什么体验?
  17. VBS+迷你QQ,实现机器远程休眠和电驴的自动休眠
  18. vue3+heightchart实现3D饼图,echarts3D饼图,3D饼图引导线实现
  19. win10、win7 脚本导证书到系统中
  20. TiDB 在汽车之家818台网互动项目中的应用

热门文章

  1. 系统架构师论文-论软件开发平台的选择和应用(MIS系统)
  2. 不需要 Root,也能用上强大的 Xposed 框架:VirtualXposed
  3. Informatica优化 - DTM Buffer Size
  4. 【转1】 OpenWrt Chaos Calmer 15.05使用mwan3单线多拨教程
  5. 计算机插入的u盘文件打不开,为什么u盘文件夹打不开
  6. 关于Svchost.exe的说明及可能出现的问题解答
  7. 用word快速将数字字体换成新罗马详细简单方法
  8. 将列表类型的数据转换为树形数据
  9. 每日古文--邹忌讽齐王纳谏
  10. C# AHP层次分析法计算特征向量(和法、根法、幂法)