基姆拉尔森 (Kim larsen) 星期计算公式

2023-12-23 00:38

本文主要是介绍基姆拉尔森 (Kim larsen) 星期计算公式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        W = (d + 1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7

        其中m / d / y分别代表月 (month)、日 (day)、年 (year);1月和2月对应的m是13和14,同时y相应-1

        W = 1 ~ 0 分别代表着星期一 ~ 星期日;

        简单的验证一下:0年1月1日(0 - 周日),1年1月1日(1 - 周一),2020年3月24日(2 - 周二)

推导(参考https://bbs.csdn.net/topics/70277519)

        整个推导的核心思想,是得到y年m月1日是星期几,然后推演出y年m月中,d和W的关系!

        0年1月1日是周日,则最开始一周的天数和星期数有如下对应关系:

        1 - 周日(W = 0), 2 - 周一(W = 1), ......,7 - 周六(W = 6)

        7天一个周期,因此对于0年的1月,有

                                          W = (d - 1)% 7  ····················································································(1)

        以一年365天计算,365 = 7 * 52 + 1,也就意味着每过一年,第一天的星期数都会增长1,因此对于y年的1月,有

                                          W = (d - 1 + y)% 7  ···············································································(2)

        闰年有366天,因此需要将y - 1年中的所有闰年考虑进来(参考上图,y年是否闰年不影响y年1月的星期数),因此,对y年的1月,有

                                          W = (d - 1 + y + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400)% 7  ···························(3)

        类似不同年之间星期数的推算,可以对不同月份的星期数做推算,m月1号 - (m - 1)月1号 = (m - 1)月天数,如果该天数是7的倍数,则W和d的推演关系不变;否则向后推延 (m - 1)月天数 % 7。以y为非闰年为例,有

m月天数天数 % 7m月1日较1月1日的推延
13130
22803
33133
43026
53138 -> 1
63024
73136
83139 -> 2
93025
103137 -> 0
113023
123135

        偏差e = {0,3,3,6,1,4,6,2,5,0,3,5} (y非闰年)

                                          W = (d - 1 + y + (y - 1) / 4 - (y - 1) / 100 + (y - 1) / 400 + e [m - 1])% 7  ··········(4)

        但此时,对于y是闰年的情况,又会得到新的一组e;此时W的公式取决于y是否为闰年。为了避免分情况讨论的繁琐,一个机智的做法是将N年的1月和2月并入N-1年,作为13月和14月。在此基础上,我们重新推导:

============================ 我是分割线 ============================

        0年3月1日是周三,则最开始一周的天数和星期数有如下对应关系:

        1 - 周三(W = 3), 2 - 周四(W = 4), ......,7 - 周二(W = 2)

        7天一个周期,因此对于0年的3月,有

                                          W = (d + 2)% 7  ····················································································(1)

        以一年365天计算,365 = 7 * 52 + 1,也就意味着每过一年,第一天的星期数都会增长1,因此对于y年的3月,有

                                          W = (d + 2 + y)% 7  ··············································································(2)

        闰年有366天,因此需要将y年中的所有闰年考虑进来(参考上图,y年是否闰年影响y年3月的星期数),因此,对y年的3月,有

                                          W = (d + 2 + y + y / 4 - y / 100 + y / 400)% 7  ···························(3)

        类似不同年之间星期数的推算,可以对不同月份的星期数做推算,m月1号 - (m - 1)月1号 = (m - 1)月天数,如果该天数是7的倍数,则W和d的推演关系不变;否则向后推延 (m - 1)月天数 % 7。

m月天数天数 % 7m月1日较3月1日的推延
33130
43023
53135
63028 -> 1
73133
83136
93029 -> 2
103134
113027 -> 0
123132
133135
1428 / 290 / 18 -> 1

        可以发现,y年是否为闰年,偏差均为e = {0,3,5,1,3,6,2,4,0,2,5,1} 。注意,e的最后两个值对应y+1年的1月和2月,这里暂不作讨论。对于y年3~12月,均有

                                          W = (d + 2 + y + y / 4 - y / 100 + y / 400 + e[m - 3])% 7  ····································(4)

        令x = m - 3,则e[x] = [2 * (x + 3) + 3 * (x + 4) / 5 - 1] % 7,因此有 e[m - 3] = 2 * m + 3 * (m + 1) / 5 - 1,因此,对于y年3~12月,有

                                          W = (d + 1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400)% 7  ········(5)

        而对于y年的1~2月,将其作为y - 1年的13~14月来求解,则会发现y年是否是闰年,只会影响y - 1年14月的天数,对y - 1年13月和14月的星期数求解并无影响。

        令x = m - 3,对于m=13和14的情况,仍有e[x] = [2 * (x + 3) + 3 * (x + 4) / 5 - 1] % 7,因此有 e[m - 3] = 2 * m + 3 * (m + 1) / 5 - 1。所以以下求解式对所有情况都通用:)

                                          W = (d + 1 + 2 * m + 3 * (m + 1) / 5 + y + y / 4 - y / 100 + y / 400) % 7

这篇关于基姆拉尔森 (Kim larsen) 星期计算公式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526088

相关文章

vue实现带日期星期数字时钟代码

<template ><view ><view>{{date}}</view><view>{{time}}</view></view></template><script>import service from '../../service.js';export default {data:{date:'',timerID:'',time:'',week:['星期日', '星期一', '星期二',

【深度学习】LSTM模型,GRU模型计算公式及其优缺点介绍

一.LSTM介绍 LSTM(Long Short-Term Memory)也称长短时记忆结构, 它是传统RNN的变体, 与经典RNN相比能够有效捕捉长序列之间的语义关联, 缓解梯度消失或爆炸现象. 同时LSTM的结构更复杂, 它的核心结构可以分为四个部分去解析: 遗忘门输入门细胞状态输出门  1LSTM的内部结构图  1.1 LSTM结构分析 结构解释图:   遗忘门部分结构图与计算

计算星期

题目内容: 给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。 输入格式: 年 月 日 输出格式: 0~6。     星期日用 0 表示,星期一用 1 表示,星期二用 2 表示......星期六用 6 表示。 假设年份大于1900。先想一想:我们现在只

上班第七个星期

上班第七个星期 星期一 今天一整天都在写上个星期没有写完的需求。 星期二 代码已经写完了,那就是前后端联调了,今天一整天都在进行前后端联调。 星期三 早上到公司,发现电脑处于休眠状态一直无法唤醒。然后我就强制关机了,再次开机的时候,就发现不能开机了。然后我就把机箱拆开看看问题在哪里?拆开之后发现主板上的故障灯亮了,找到说明书看了一下,发现是 CPU 和内存条的问题,然后我就把 CPU

java calender 把string转换成date类型并获取为星期几

 /**   * 将string 类型转换为date类型并获取当前shi yizhou de dijitian .   *   * @param strMonth   * @return   */  private String stringChangeDatedd(String strMonth) {   Calendar calendar = Calendar.getInstanc

单机无穷大系统短路比计算公式

变流器的短路比(Short Circuit Ratio, SCR)是衡量变流器在接入电网时对电网稳定性影响的一个重要指标。它通常用于评估变流器在弱电网条件下的运行性能。变流器的短路比计算与传统发电机有所不同。 变流器短路比的定义: 变流器的短路比是电网短路容量与变流器额定容量之比。 计算公式: SCR = S s c S i n v \text{SCR} = \frac{S_{sc}}

功率(电功率)的四大计算公式

电功率是衡量电能转化为其他形式能量的速率。在电力系统中,功率的计算是基础且关键的内容。以下是电功率的四大计算公式: 1. 功率公式(直流电) 对于直流电(DC),功率 (P) 可以通过以下公式计算: [ P = V \times I ] 其中: (P) 为功率(瓦特,W) (V) 为电压(伏特,V) (I) 为电流(安培,A) 2. 功率公式(交流电) 对于纯阻性负载的交流电(A

Uniapp通过年月日时间转变星期格式

效果图 参靠微信小程序:日常记一记 代码 <view v-for="(d,index) in dataList" >{{getWeekDay(d.ctime)}} //时间格式:2024-06-21</view> js export default {data(){return {dataList:[],//时间数组}},onLoad() {this.loadList();/

Java基础 - 练习(五)根据今天日期获取一周内的日期(基姆拉尔森公式)

基姆拉尔森计算公式用于计算一周内的日期。比如给你年月日,从而计算今天是星期几。 基姆拉尔森公式 Week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1) mod 7, 3<=m<=14 Week的取值范围是0 ~ 6,其中0代表星期日,1 ~ 6分别代表星期一到星期六。注意在运算时要把1月和2月看为是上一年的13月和14月代入计算! int Date(i

js获取年月日时分秒及星期几

最近发现好像写这种基础博客的很少,文章大部分都是几年前的,之前对于时间这块都是直接使用day.js 来处理,废话不多说,直接进入正题 const now = new Date();//初始值now.getFullYear()//年now.getMonth() + 1 //月now.getDate() //日now.getHours()//时now.getMinutes()//分now