冬至计算(一千年冬至计算)

上一篇我们分析了清明节的计算,冬至也是十分重要的节日,那么冬至如何计算呢?


统计了一千多年日历发现:

最早的冬至日是 2096年,其交节时间为 2096-12-21 04:45:43

最晚的冬至日是 3103年,其交节时间为 3103-12-23 11:51:19


使用拟合算法对一千多年(1700-3100)冬至日进行了计算,发现三个特例,进行了排除.上节清明节的计算仅发现一个特例:

代码如下:


package nongli;

public class Dong {

	/**
	 * 计算冬至的日期(可计算范围: 1700-3100)
	 * 
	 * @param year
	 *            需要计算的年份
	 * @return 冬至在公历中的日期
	 */
	public static int dong(int year) {
		if (year == 2767) {
			return 23;
		}
		if (year == 2227||year == 3068) {
			return 22;
		}
		if (year < 1700) {
			throw new RuntimeException("1700年以前暂时不支持");
		}
		if (year >= 3100) {
			throw new RuntimeException("3100年以后暂时不支持");
		}
		double[] coefficient = { 22.11, 22.39, 22.66, 21.90, 22.18, 22.472, 22.72, 21.995, 22.27, 22.51, 22.75, 22.02, 22.27, 22.519,
				22.80 };
		int mod = year % 100;
		return (int) (mod * 0.2422 + coefficient[year / 100 - 17] - mod / 4);
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值