中国公历算法

本节介绍了公历(Gregorian calendar)的算法 ,其中包括了星期的计算和闰年 的计算。

中国公历算法不是太难,关键是星期值的确定。这里给出了简单算法:

isGregorianLeapYear() 函数反回值为 True,如果输入值为闰年:

   public static boolean isGregorianLeapYear(int year) {
      boolean isLeap = false;
      if (year%4==0) isLeap = true;
      if (year%100==0) isLeap = false;
      if (year%400==0) isLeap = true;
      return isLeap;
   }

dayOfYear() 函数反回值为输入日期在一年之中的天数:

   public static int dayOfYear(int y, int m, int d) {
      int c = 0;
      for (int i=1; i<m; i++) { // Number of months passed
         c = c + daysInGregorianMonth(y,i);
      }
      c = c + d;
      return c;      
   }
   public static int daysInGregorianMonth(int y, int m) {
      int d = daysInGregorianMonth[m-1];
      if (m==2 && isGregorianLeapYear(y)) d++;
      return d;      
   }

dayOfWeek() 函数反回值为输入日期的星期值:

   public static int dayOfWeek(int y, int m, int d) {
      int w = 1; // 公历一年一月一日是星期一,所以起始值为星期日
      y = (y-1)%400 + 1; // 公历星期值分部 400 年循环一次
      int ly = (y-1)/4; // 闰年次数
      ly = ly - (y-1)/100;
      ly = ly + (y-1)/400;
      int ry = y - 1 - ly; // 常年次数
      w = w + ry; // 常年星期值增一
      w = w + 2*ly; // 闰年星期值增二
      w = w + dayOfYear(y,m,d); 
      w = (w-1)%7 + 1;
      return w;
   }

Table of Contents

 序言

 中国农历规则和日历原理

中国年历算法和程式

中国公历算法

 中国农历算法

 中国农历计算程式

 中国农历计算程式使用方法

 中国二百年(1901年至2100年)年历格式说明

 中国年历 - 1901年至1910年

 中国年历 - 1911年至1920年

 中国年历 - 1921年至1930年

 中国年历 - 1931年至1940年

 中国年历 - 1941年至1950年

 中国年历 - 1951年至1960年

 中国年历 - 1961年至1970年

 中国年历 - 1971年至1980年

 中国年历 - 1981年至1990年

 中国年历 - 1991年至2000年

 中国年历 - 2001年至2010年

 中国年历 - 2011年至2020年

 中国年历 - 2021年至2030年

 中国年历 - 2031年至2040年

 中国年历 - 2041年至2050年

 中国年历 - 2051年至2060年

 中国年历 - 2061年至2070年

 中国年历 - 2071年至2080年

 中国年历 - 2081年至2090年

 中国年历 - 2091年至2100年

 参考文献

 PDF打印版