每年一问:Java日期格式化中周所在年引发的bug

作者 | 袁丙泽

编辑 | Debra Chen

在处理涉及每年周数问题时,如果处于不同的地区或文化中,总会遇见一些标准问题。比如基督教信徒喜欢把周日当做每周的第一天。而不同的编程语言,也会有自己的处理方案,有些是每年从第0周开始,有些是从第一周开始。对于数据分析者来说,标准不统一带来的歧义是非常致命的。

在Apache DolphinScheduler使用过程中,每年新旧年交替的时候,日期的使用问题就会凸显出来。为避免日期带来的歧义,笔者认为最好的办法是严格按照 ISO 8601 标准进行处理。

从Java 8 开始,Java的日期格式化开始支持ISO 8601标准。大写Y 表示周所在年。小写y表示自然年。由于很多程序在开发时并未注意大小写问题。在处理日期时,每年年末或者年初都能碰到由于这个问题踩到坑的。

参考:https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html

根据ISO 8601 的规则,再来详细了解下周及周年的详细的计算规则:

  1. 每年有52周或者53周
  2. 周一至周日为一个完整周。
  3. 每周的周一是该周的第1天。周日是该周的第7天
  4. 每年的第一周 为 每年的第一个 周四 所在的周。比如 2017年1月5日为当年的第一个周四,那么 2017-01-02 至 2017-01-08 为2017年第一周
  5. 每年的最后一周为当年最后一个周四所在的周。比如2016年12月29日为当年的最后一个周四,那么2016-12-26 至2017-01-01 为2016年的最后一周。
  6. 周年,当前周所在的年份为周年。比如 2017年1月1日的周年为2016年。2016年1月1日,2016年1月2日,2016年1月3日的周年均为2015年。 2024年12月30日、12月31日的周年均为2025年。

参考:https://blog.csdn.net/yuanbingze/article/details/72127763

再次提醒大家,在日期使用时注意Y的大小写和ISO 8601 的规则,避免引起不必要的麻烦。

本文由 白鲸开源科技 提供发布支持!

相关推荐
武子康17 小时前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive
大大大大晴天18 小时前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
武子康3 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
武子康4 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP4 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库4 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全
AI周红伟4 天前
周红伟:智能体全栈构建实操:OpenClaw部署+Agent Skills+Seedance+RAG从入门到实战
大数据·人工智能·大模型·智能体
B站计算机毕业设计超人4 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
计算机程序猿学长4 天前
大数据毕业设计-基于django的音乐网站数据分析管理系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
大数据·django·课程设计
B站计算机毕业设计超人4 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计