上一篇我们分析了清明节的计算,冬至也是十分重要的节日,那么冬至如何计算呢?
统计了一千多年日历发现:
最早的冬至日是 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);
}
}