计算日期差值的神奇方法

m1 = (month_start + 9) % 12;
y1 = year_start - m1/10;
d1 = 365*y1 + y1/4 - y1/100 + y1/400 + (m1*306 + 5)/10 + (day_start - 1);

该段代码可以用于重载日期的减法,将两个日期放在分别计算与某一天的差值(用上述公式),再将两个差值相减,便可以轻松计算出差值了

看起来是用于计算儒略日数或进行日期操作的一部分,这种算法经常出现在日历计算或日期转换程序中。让我们解析一下每一行代码的作用:

  1. m1 = (month_start + 9) % 12;

    • 这一行调整月份编号。公式 (month_start + 9) % 12 是一种方式,通过这种方式,3月变成月份0,4月变成月份1,依此类推,到12月变成月份9,1月变成月份10,2月变成月份11。这样做的原因是,在儒略历和公历系统中,由于闰年的处理方式,3月经常被用作计算中的一年的第一个月。
  2. y1 = year_start - m1/10;

    • 这一行调整年份。如果月份经过调整后是1月或2月(即原始月份+9后对12取模结果为10或11),m1/10 的结果会是1(因为使用了整数除法),这意味着需要从原始年份中减去1。这样做是因为在这个系统中,1月和2月被看作是前一年的最后两个月。
  3. d1 = 365*y1 + y1/4 - y1/100 + y1/400 + (m1*306 + 5)/10 + (day_start - 1);

    • 这一行计算从纪元(通常是公元前4713年1月1日)到指定日期的天数。这个公式包括几个部分:
      • 365*y1:计算年份带来的天数(不包括闰年额外的一天)。
      • y1/4 - y1/100 + y1/400:根据儒略历或公历的规则添加闰年带来的额外天数。
      • (m1*306 + 5)/10:通过对调整后的月份进行计算来确定这些月份贡献的天数,这里的306是平均每月天数乘以10的结果。
      • (day_start - 1):计算月份中的天数贡献,从月份的第一天开始计数。

整个计算过程复杂且精确,通常用于需要精确日期差计算的场合,例如天文学、历史学研究,或是在软件开发中处理复杂的日期问题

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值