“不知今夕是何年”的周基年解法 | 得物技术

2024年1月5日,周五,本来是个美好的日子,期待着马上到来的周末。可是下午1点多,接到产品一个问题反馈,经过一番排查,23年7月份上线的功能,对于跨年场景的处理有问题,其核心在于“周的年”获取方式不正确。
举个🌰

(1)前端:页面按照周来选择,例如 2024-12-30,返回给后端的是 Year:2025 -Week:1。

图片

2)后端:根据前端传递的 Year-Week 去DB中查询 数据开发回流的历史离线数据,神奇的事儿就发生了。如下图,数据中 Year字段,就不太正常,2024-12-30,应该是2025年的第一周。

图片

同样的问题,也会出现在1月的开始几天,year字段不太正常。

图片

这是出了什么问题呢?

因为不知今夕是何年啊!!!

ISO-8601标准

ISO-8601是国际标准化组织(ISO)发布的日期和时间表示法的标准,它定义了一种统一的日期和时间格式。ISO-8601标准的目的是提供一种易于理解、易于比较和易于存储的日期和时间表示方法,以便在不同的计算机系统和地区之间进行交互和共享。

周的定义

ISO-8601标准还定义了一种标准的周定义,用于表示周数。该定义基于一年中的周数,以及每周的起始日和结束日。

根据ISO-8601标准的周定义:

  1. 一年中的第一个周:一年中的第一个周是包含该年的第一个星期四的周。这意味着该年的第一个周可能会跨越前一年和当前年。

  2. 每周的起始日:ISO-8601将周的起始日定义为星期一。

  3. 每周的结束日:ISO-8601将周的结束日定义为星期日。

根据这个定义,一年中的周数从1开始,持续到52或53。如果一年的第一个周跨越前一年和当前年,则第一个周的周数是前一年的最后一周,而不是当前年的第一周。

使用ISO-8601的周定义,可以准确地表示和计算一年中的周数。这种定义方式确保了在不同的计算机系统和地区之间,对于特定的日期,可以一致地确定所在的周数。

这一周算上一年还是下一年,取决于这一周的大多数日期(4天以上)在哪一年。算在前一年,就是前一年的最后一周;算在后一年就是后一年的第一周。

图片

周基年的定义

在ISO-8601标准中,对周的年定义是一种与常规年份定义略有不同的方式。它被称为周基年(Week-based Year)。

根据ISO-8601标准的周基年定义:

  1. 一年中的第一个周:一年中的第一个周是包含该年的第一个星期四的周。这意味着该年的第一个周可能会跨越前一年和当前年。

  2. 每周的起始日:ISO-8601将周的起始日定义为星期一。

  3. 每周的结束日:ISO-8601将周的结束日定义为星期日。

根据这个定义,一年中的周数从1开始,持续到52或53。如果一年的第一个周跨越前一年和当前年,则第一个周的周数是前一年的最后一周,而不是当前年的第一周。

周基年的定义方式使得在计算和表示特定日期所在的周数时更加准确和统一。它确保了在不同的计算机系统和地区之间,对于特定日期所在的周数能够一致地确定。

简单说,当计算一个日期x是某年的某周,不能直接用常见的getYear,也就是不能用自然年,要用周基年

在Java中,java.time.LocalDate类和java.time.temporal.WeekFields类提供了方便的方法来处理ISO-8601标准的周基年。通过使用这些类,可以轻松地获取指定日期所在的周基年和周数,并进行相关的日期和时间计算。

图片

所以当需要用到某年某周的场景,必须用周基年+周,否则迟早都是雷。最后贴一个jdk8的源代码实现,细细品读。

图片

图片

从“周基年”这个小场景,可以发现编程基础的扎实与否多么重要,很多同学认为八股文没有价值,恰恰就是这种坚实的基础保证下,才能够让我们的业务系统运行顺畅无问题。

*文/摇浪 

本文属得物技术原创,更多精彩文章请看:得物技术官网

未经得物技术许可严禁转载,否则依法追究法律责任!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/512615.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows 11 如何使用 IE 浏览器

众所周知:IE 浏览器已经被微软废弃,像windows 11这种系统内置已经找不到 IE 浏览器了,这对前端工程师而言,肯定是不行的。因为项目中,经常有现场需要支持 ie 浏览器。(吐槽一下:微软都放弃了&am…

Centos7安装单机版Kafka

下载 链接:https://pan.baidu.com/s/1W8lVEF6Y-xlg6zr3l9QAbg?pwdhbkt 提取码:hbkt 上传到服务器/opt目录 安装 # kafka安装目录为 /opt/kafka cd /opt; mkdir kafka; mv kafka_2.13-2.7.0.tgz ./kafka;cd kafka; #解压 tar -zxvf kafka_2.13-2.7.0…

OpenHarmony实战开发-如何通过Stage模型实现一个简单的游戏卡片

介绍 本示例展示了如何通过Stage模型实现一个简单的游戏卡片。 通过卡片支持的点击事件进行交互,让用户通过点击的先后顺序把一个乱序的成语排列成正确的成语。使用了C和TS的混合编程方式,将获取随机数的能力下沉到C实现,并通过NAPI的能力将…

[RK3588-Android12] 调试MIPI-双通道-压缩屏(Video Mode/MIPI Dphy 8Lane/DSC 144HZ)

问题描述 被测屏幕:小米Pad6 分辨率:1800X2880 模式:Video Mode/MIPI Dphy 8Lane/DSC 144HZ PPS: 11 00 00 89 30 80 0B 40 03 84 00 14 01 C2 01 C2 02 00 01 F4 00 20 01 AB 00 06 00 0D 05 7A 06 1A 18 00 10 F0 03 0C 20 00 06 0B 0B 33…

ssh连接虚拟机 ubuntu

目录 虚拟机设置linux 安装sshFileZilla登录 虚拟机设置 linux 安装ssh sudo apt-get install openssh-server FileZilla登录

【问题处理】银河麒麟操作系统实例分享,理光打印机lpr协议打印问题处理

1.问题环境 系统版本:Kylin-Desktop-V10-SP1-General-Release-xxx-20221120-x86_64 内核版本:linux 5.4.18-44kt-generic 系统版本:麒麟v10 sp1 处理器:kx6640ma 2.问题描述 问题详细描述:用户通过lpr协议去连接…

2024052期传足14场胜负前瞻

2024052期售止时间为4月3日(周三)22点00分,敬请留意: 本期深盘多,1.5以下赔率7场,1.5-2.0赔率1场,其他场次是平半盘、平盘。本期14场难度中等偏下。以下为基础盘前瞻,大家可根据自身…

算法学习17:背包问题(动态规划)

算法学习17:背包问题(动态规划) 文章目录 算法学习17:背包问题(动态规划)前言一、01背包问题:1.朴素版:(二维)2.优化版:(一维&#xf…

蓝色wordpress外贸建站模板

蓝色wordpress外贸建站模板 https://www.mymoban.com/wordpress/7.html

搭建 Qt 开发环境

🐌博主主页:🐌​倔强的大蜗牛🐌​ 📚专栏分类:QT❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、QT SDK 的下载和安装 1.QT SDK 的下载 二、QT SDK的安装 1、找到下载的文件并双击 2、双击之…

2.人机交互-图形化界面的小故事

文章目录 一、图形化界面的小故事二、什么是cmd? 计算机在刚开始出现的时候,因为占地广、造价高、耗电多,一般都是给军队或者政府使用的,而并不是给个人使用的。然后随着计算机不断地发展,体积越来越小,出现…

深度解析C语言——预处理详解

对C语言有一定了解的同学&#xff0c;相信对预处理一定不会陌生。今天我们就来聊一聊一些预处理的相关知识。预处理是在编译之前对源文件进行简单加工的过程&#xff0c;主要是处理以#开头的命令&#xff0c;例如#include <stdio.h>、#define等。预处理是C语言的一个重要…

数学建模-------MATLAB分支循环断点调试

1.if语句 &#xff08;1&#xff09;分段函数的引入&#xff08;这里的数据表示的是分数的不同区间对应的等级&#xff09; (1)这个就是一个十分简单的if语句&#xff0c;无论是if还是elseif后面都是不能添加任何分号的&#xff0c;这个例子就是一个分段的函数&#xff0c;在不…

空间数据结构(四叉树,八叉树,BVH树,BSP树,K-d树)

下文参考&#xff1a;https://www.cnblogs.com/KillerAery/p/10878367.html 游戏编程知识课程 - 四分树(quadtree)_哔哩哔哩_bilibili 利用空间数据结构可以加速计算&#xff0c;是重要的优化思想。空间数据结构常用于场景管理&#xff0c;渲染&#xff0c;物理&#xff0c;游…

Jamba: A Hybrid Transformer-Mamba Language Model

Jamba: A Hybrid Transformer-Mamba Language Model 相关链接&#xff1a;arXiv 关键字&#xff1a;hybrid architecture、Transformer、Mamba、mixture-of-experts (MoE)、language model 摘要 我们介绍了Jamba&#xff0c;一种新的基于新颖混合Transformer-Mamba混合专家&am…

VMware配置环境(安装运行问题)及系列dns端口网络类型IP远程连接学习之(详谈8000字)

安装vmware快速配置步骤 下载VMware安装包 在下载好VMware安装包之后双击运行 接受条款 关闭VMware自动更新 勾选快捷键方式 安装VMware安装 输入许可证&#xff08;有需要私信小编&#xff09; 安装完成 重启电脑即可 最终成功界面: 安装Linux系统 创建虚拟机 选择…

工业互联网网关软件分析与设计

一、 案例软件分析 一、总体目标 工业互联网是新一代信息技术与制造业深度融合形成的新兴业态和应用模式&#xff0c;其发展前景广阔。工业互联网网关是将各采集监测点的数据通过无线或有线传感网络进行数据汇集&#xff0c;进行统一有效的监管。在工业互联网体系架构中&…

聚焦丨酷雷曼亮相文旅虚拟现实应用推广活动

图片来源&#xff1a;虚拟现实与元宇宙产业联盟XRMA 2024年3月21日&#xff0c;由文化和旅游部产业发展司主办的数字赋能文旅场景建设行动——文化和旅游虚拟现实应用推广交流活动在北京市石景山区首钢园举办。 酷雷曼市场总监刘方磊出席活动&#xff0c;并在活动现场展示酷雷…

【云呐】固定资产盘点报告表怎么填

报告表以表述清晰为主,避免繁琐,重要数据及问题使用表格形式展示。通过签字对报告负责认同度。内容应全面反映本次盘点,提供参考依据。一、标题 包含单位名称、报告期间等基本信息二、前言 概括本次盘点的目的和任务签署三、盘点范围与时间 明确盘点的固定资产项目和时…

【C语言】2048小游戏【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、游戏描述&#xff1a; 2048是一款数字益智类游戏&#xff0c;玩家需要使用键盘控制数字方块的移动&#xff0c;合并相同数字的方块&#xff0c;最终达到数字方块上出现“2048”的目标。 每次移动操作&#xff0c;所…