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

打印 上一主题 下一主题

主题 878|帖子 878|积分 2634


作者 | 袁丙泽
编辑 | 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 的规则,再来详细了解下周及周年的详细的盘算规则:

  • 每年有52周或者53周
  • 周一至周日为一个完整周。
  • 每周的周一是该周的第1天。周日是该周的第7天
  • 每年的第一周 为 每年的第一个 周四  地点的周。比如 2017年1月5日为当年的第一个周四,那么 2017-01-02 至 2017-01-08 为2017年第一周
  • 每年的最后一周为当年最后一个周四地点的周。比如2016年12月29日为当年的最后一个周四,那么2016-12-26 至2017-01-01 为2016年的最后一周。
  • 周年,当前周地点的年份为周年。比如 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 的规则,制止引起不必要的麻烦。
本文由 白鲸开源 提供发布支持!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表