<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0

    /**
     * ChineseCalendarGB.java
     * Copyright (c) 1997-2002 by Dr. Herong Yang
     * 中國農歷算法 - 實用于公歷 1901 年至 2100 年之間的 200 年
     */
    import java.text.*;
    import java.util.*;
    class ChineseCalendarGB {
       private int gregorianYear;
       private int gregorianMonth;
       private int gregorianDate;
       private boolean isGregorianLeap;
       private int dayOfYear;
       private int dayOfWeek; // 周日一星期的第一天
       private int chineseYear;
       private int chineseMonth; // 負數表示閏月
       private int chineseDate;
       private int sectionalTerm;
       private int principleTerm;
       private static char[] daysInGregorianMonth =
          {31,28,31,30,31,30,31,31,30,31,30,31};
       private static String[] stemNames =
          {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
       private static String[] branchNames =
          {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
       private static String[] animalNames =
          {"鼠","牛","虎","兔","龍","蛇","馬","羊","猴","雞","狗","豬"};
       public static void main(String[] arg) {
          ChineseCalendarGB c = new ChineseCalendarGB();
          String cmd = "day";
          int y = 1901;
          int m = 1;
          int d = 1;
          if (arg.length>0) cmd = arg[0];
          if (arg.length>1) y = Integer.parseInt(arg[1]);
          if (arg.length>2) m = Integer.parseInt(arg[2]);
          if (arg.length>3) d = Integer.parseInt(arg[3]);
          c.setGregorian(y,m,d);
          c.computeChineseFields();
          c.computeSolarTerms();
          if (cmd.equalsIgnoreCase("year")) {
             String[] t = c.getYearTable();
             for (int i=0; i<t.length; i++) System.out.println(t[i]);
          } else if (cmd.equalsIgnoreCase("month")) {
             String[] t = c.getMonthTable();
             for (int i=0; i<t.length; i++) System.out.println(t[i]);
          } else {
             System.out.println(c.toString());
          }
       }
       public ChineseCalendarGB() {
          setGregorian(1901,1,1);
       }
       public void setGregorian(int y, int m, int d) {
          gregorianYear = y;
          gregorianMonth = m;
          gregorianDate = d;
          isGregorianLeap = isGregorianLeapYear(y);
          dayOfYear = dayOfYear(y,m,d);
          dayOfWeek = dayOfWeek(y,m,d);
          chineseYear = 0;
          chineseMonth = 0;
          chineseDate = 0;
          sectionalTerm = 0;
          principleTerm = 0;
       }
       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;
       }
       public static int daysInGregorianMonth(int y, int m) {
          int d = daysInGregorianMonth[m-1];
          if (m==2 && isGregorianLeapYear(y)) d++; // 公歷閏年二月多一天
          return d;
       }
       public static int dayOfYear(int y, int m, int d) {
          int c = 0;
          for (int i=1; i<m; i++) {
             c = c + daysInGregorianMonth(y,i);
          }
          c = c + d;
          return c;     
       }
       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;
       }
       private static char[] chineseMonths = {
       // 農歷月份大小壓縮表,兩個字節表示一年。兩個字節共十六個二進制位數,
       // 前四個位數表示閏月月份,后十二個位數表示十二個農歷月份的大小。
       0x00,0x04,0xad,0x08,0x5a,0x01,0xd5,0x54,0xb4,0x09,0x64,0x05,0x59,0x45,
       0x95,0x0a,0xa6,0x04,0x55,0x24,0xad,0x08,0x5a,0x62,0xda,0x04,0xb4,0x05,
       0xb4,0x55,0x52,0x0d,0x94,0x0a,0x4a,0x2a,0x56,0x02,0x6d,0x71,0x6d,0x01,
       0xda,0x02,0xd2,0x52,0xa9,0x05,0x49,0x0d,0x2a,0x45,0x2b,0x09,0x56,0x01,
       0xb5,0x20,0x6d,0x01,0x59,0x69,0xd4,0x0a,0xa8,0x05,0xa9,0x56,0xa5,0x04,
       0x2b,0x09,0x9e,0x38,0xb6,0x08,0xec,0x74,0x6c,0x05,0xd4,0x0a,0xe4,0x6a,
       0x52,0x05,0x95,0x0a,0x5a,0x42,0x5b,0x04,0xb6,0x04,0xb4,0x22,0x6a,0x05,
       0x52,0x75,0xc9,0x0a,0x52,0x05,0x35,0x55,0x4d,0x0a,0x5a,0x02,0x5d,0x31,
       0xb5,0x02,0x6a,0x8a,0x68,0x05,0xa9,0x0a,0x8a,0x6a,0x2a,0x05,0x2d,0x09,
       0xaa,0x48,0x5a,0x01,0xb5,0x09,0xb0,0x39,0x64,0x05,0x25,0x75,0x95,0x0a,
       0x96,0x04,0x4d,0x54,0xad,0x04,0xda,0x04,0xd4,0x44,0xb4,0x05,0x54,0x85,
       0x52,0x0d,0x92,0x0a,0x56,0x6a,0x56,0x02,0x6d,0x02,0x6a,0x41,0xda,0x02,
       0xb2,0xa1,0xa9,0x05,0x49,0x0d,0x0a,0x6d,0x2a,0x09,0x56,0x01,0xad,0x50,
       0x6d,0x01,0xd9,0x02,0xd1,0x3a,0xa8,0x05,0x29,0x85,0xa5,0x0c,0x2a,0x09,
       0x96,0x54,0xb6,0x08,0x6c,0x09,0x64,0x45,0xd4,0x0a,0xa4,0x05,0x51,0x25,
       0x95,0x0a,0x2a,0x72,0x5b,0x04,0xb6,0x04,0xac,0x52,0x6a,0x05,0xd2,0x0a,
       0xa2,0x4a,0x4a,0x05,0x55,0x94,0x2d,0x0a,0x5a,0x02,0x75,0x61,0xb5,0x02,
       0x6a,0x03,0x61,0x45,0xa9,0x0a,0x4a,0x05,0x25,0x25,0x2d,0x09,0x9a,0x68,
       0xda,0x08,0xb4,0x09,0xa8,0x59,0x54,0x03,0xa5,0x0a,0x91,0x3a,0x96,0x04,
       0xad,0xb0,0xad,0x04,0xda,0x04,0xf4,0x62,0xb4,0x05,0x54,0x0b,0x44,0x5d,
       0x52,0x0a,0x95,0x04,0x55,0x22,0x6d,0x02,0x5a,0x71,0xda,0x02,0xaa,0x05,
       0xb2,0x55,0x49,0x0b,0x4a,0x0a,0x2d,0x39,0x36,0x01,0x6d,0x80,0x6d,0x01,
       0xd9,0x02,0xe9,0x6a,0xa8,0x05,0x29,0x0b,0x9a,0x4c,0xaa,0x08,0xb6,0x08,
       0xb4,0x38,0x6c,0x09,0x54,0x75,0xd4,0x0a,0xa4,0x05,0x45,0x55,0x95,0x0a,
       0x9a,0x04,0x55,0x44,0xb5,0x04,0x6a,0x82,0x6a,0x05,0xd2,0x0a,0x92,0x6a,
       0x4a,0x05,0x55,0x0a,0x2a,0x4a,0x5a,0x02,0xb5,0x02,0xb2,0x31,0x69,0x03,
       0x31,0x73,0xa9,0x0a,0x4a,0x05,0x2d,0x55,0x2d,0x09,0x5a,0x01,0xd5,0x48,
       0xb4,0x09,0x68,0x89,0x54,0x0b,0xa4,0x0a,0xa5,0x6a,0x95,0x04,0xad,0x08,
       0x6a,0x44,0xda,0x04,0x74,0x05,0xb0,0x25,0x54,0x03
       };
       // 初始日,公歷農歷對應日期:
       // 公歷 1901 年 1 月 1 日,對應農歷 4598 年 11 月 11 日
       private static int baseYear = 1901;
       private static int baseMonth = 1;
       private static int baseDate = 1;
       private static int baseIndex = 0;
       private static int baseChineseYear = 4598-1;
       private static int baseChineseMonth = 11;
       private static int baseChineseDate = 11;
       public int computeChineseFields() {
          if (gregorianYear<1901 || gregorianYear>2100) return 1;
          int startYear = baseYear;
          int startMonth = baseMonth;
          int startDate = baseDate;     
          chineseYear = baseChineseYear;
          chineseMonth = baseChineseMonth;
          chineseDate = baseChineseDate;
          // 第二個對應日,用以提高計算效率
          // 公歷 2000 年 1 月 1 日,對應農歷 4697 年 11 月 25 日
          if (gregorianYear >= 2000) {
             startYear = baseYear + 99;
             startMonth = 1;
             startDate = 1;
             chineseYear = baseChineseYear + 99;
             chineseMonth = 11;
             chineseDate = 25;
          }
          int daysDiff = 0;
          for (int i=startYear; i<gregorianYear; i++) {
             daysDiff += 365;
             if (isGregorianLeapYear(i)) daysDiff += 1; // leap year
          }
          for (int i=startMonth; i<gregorianMonth; i++) {
             daysDiff += daysInGregorianMonth(gregorianYear,i);
          }
          daysDiff += gregorianDate - startDate;
         
          chineseDate += daysDiff;
          int lastDate = daysInChineseMonth(chineseYear, chineseMonth);
          int nextMonth = nextChineseMonth(chineseYear, chineseMonth);
          while (chineseDate>lastDate) {
             if (Math.abs(nextMonth)<Math.abs(chineseMonth)) chineseYear++;
             chineseMonth = nextMonth;
             chineseDate -= lastDate;
             lastDate = daysInChineseMonth(chineseYear, chineseMonth);
             nextMonth = nextChineseMonth(chineseYear, chineseMonth);
          }
          return 0;
       }
       private static int[] bigLeapMonthYears = {
          // 大閏月的閏年年份
            6, 14, 19, 25, 33, 36, 38, 41, 44, 52,
           55, 79,117,136,147,150,155,158,185,193
          };
       public static int daysInChineseMonth(int y, int m) {
          // 注意:閏月 m < 0
          int index = y - baseChineseYear + baseIndex;
          int v = 0;
          int l = 0;
          int d = 30;
          if (1<=m && m<=8) {
             v = chineseMonths[2*index];
             l = m - 1;
             if ( ((v>>l)&0x01)==1 ) d = 29;
          } else if (9<=m && m<=12) {
             v = chineseMonths[2*index+1];
             l = m - 9;
             if ( ((v>>l)&0x01)==1 ) d = 29;
          } else {
             v = chineseMonths[2*index+1];
             v = (v>>4)&0x0F;
             if (v!=Math.abs(m)) {
                d = 0;
             } else {
                d = 29;
                for (int i=0; i<bigLeapMonthYears.length; i++) {
                   if (bigLeapMonthYears[i]==index) {
                      d = 30;
                      break;
                   }
                }
             }
          }
          return d;
       }
       public static int nextChineseMonth(int y, int m) {
          int n = Math.abs(m) + 1;
          if (m>0) {
             int index = y - baseChineseYear + baseIndex;
             int v = chineseMonths[2*index+1];
             v = (v>>4)&0x0F;
             if (v==m) n = -m;
          }
          if (n==13) n = 1;
          return n;
       }
       private static char[][] sectionalTermMap = {
       {7,6,6,6,6,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,5,5,5,5,5,4,5,5}, 
       {5,4,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,3,4,4,4,3,3,4,4,3,3,3}, 
       {6,6,6,7,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,5},
       {5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,4,4,5,5,4,4,4,5,4,4,4,4,5},
       {6,6,6,7,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,5},
       {6,6,7,7,6,6,6,7,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,6,5,5,5,5,4,5,5,5,5},
       {7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,6,6,6,7,7},
       {8,8,8,9,8,8,8,8,7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,7},
       {8,8,8,9,8,8,8,8,7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,7},
       {9,9,9,9,8,9,9,9,8,8,9,9,8,8,8,9,8,8,8,8,7,8,8,8,7,7,8,8,8},
       {8,8,8,8,7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,7},
       {7,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,6,7,7,7,6,6,7,7,6,6,6,7,7}
       };
       private static char[][] sectionalTermYear = {
       {13,49,85,117,149,185,201,250,250},
       {13,45,81,117,149,185,201,250,250},
       {13,48,84,112,148,184,200,201,250},
       {13,45,76,108,140,172,200,201,250},
       {13,44,72,104,132,168,200,201,250},
       {5 ,33,68,96 ,124,152,188,200,201},
       {29,57,85,120,148,176,200,201,250},
       {13,48,76,104,132,168,196,200,201},
       {25,60,88,120,148,184,200,201,250},
       {16,44,76,108,144,172,200,201,250},
       {28,60,92,124,160,192,200,201,250},
       {17,53,85,124,156,188,200,201,250}
       };
       private static char[][] principleTermMap = {
       {21,21,21,21,21,20,21,21,21,20,20,21,21,20,20,20,20,20,20,20,20,19,
          20,20,20,19,19,20},
       {20,19,19,20,20,19,19,19,19,19,19,19,19,18,19,19,19,18,18,19,19,18,
          18,18,18,18,18,18},
       {21,21,21,22,21,21,21,21,20,21,21,21,20,20,21,21,20,20,20,21,20,20,
          20,20,19,20,20,20,20},
       {20,21,21,21,20,20,21,21,20,20,20,21,20,20,20,20,19,20,20,20,19,19,
          20,20,19,19,19,20,20},
       {21,22,22,22,21,21,22,22,21,21,21,22,21,21,21,21,20,21,21,21,20,20,
          21,21,20,20,20,21,21},
       {22,22,22,22,21,22,22,22,21,21,22,22,21,21,21,22,21,21,21,21,20,21,
          21,21,20,20,21,21,21},
       {23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,23,23,22,22,
          22,23,22,22,22,22,23},
       {23,24,24,24,23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,
          23,23,22,22,22,23,23},
       {23,24,24,24,23,23,24,24,23,23,23,24,23,23,23,23,22,23,23,23,22,22,
          23,23,22,22,22,23,23},
       {24,24,24,24,23,24,24,24,23,23,24,24,23,23,23,24,23,23,23,23,22,23,
          23,23,22,22,23,23,23},
       {23,23,23,23,22,23,23,23,22,22,23,23,22,22,22,23,22,22,22,22,21,22,
          22,22,21,21,22,22,22},
       {22,22,23,23,22,22,22,23,22,22,22,22,21,22,22,22,21,21,22,22,21,21,
          21,22,21,21,21,21,22}
       };
       private static char[][] principleTermYear = {
       {13,45,81,113,149,185,201},   
       {21,57,93,125,161,193,201},   
       {21,56,88,120,152,188,200,201},
       {21,49,81,116,144,176,200,201},
       {17,49,77,112,140,168,200,201},
       {28,60,88,116,148,180,200,201},
       {25,53,84,112,144,172,200,201},
       {29,57,89,120,148,180,200,201},
       {17,45,73,108,140,168,200,201},
       {28,60,92,124,160,192,200,201},
       {16,44,80,112,148,180,200,201},
       {17,53,88,120,156,188,200,201}
       };
       public int computeSolarTerms() {
          if (gregorianYear<1901 || gregorianYear>2100) return 1;
          sectionalTerm = sectionalTerm(gregorianYear, gregorianMonth);
          principleTerm = principleTerm(gregorianYear, gregorianMonth);
          return 0;
       }
       public static int sectionalTerm(int y, int m) {
          if (y<1901 || y>2100) return 0;
          int index = 0;
          int ry = y-baseYear+1;
          while (ry>=sectionalTermYear[m-1][index]) index++;
          int term = sectionalTermMap[m-1][4*index+ry%4];
          if ((ry == 121)&&(m == 4)) term = 5;
          if ((ry == 132)&&(m == 4)) term = 5;
          if ((ry == 194)&&(m == 6)) term = 6;
          return term;
       }
       public static int principleTerm(int y, int m) {
          if (y<1901 || y>2100) return 0;
          int index = 0;
          int ry = y-baseYear+1;
          while (ry>=principleTermYear[m-1][index]) index++;
          int term = principleTermMap[m-1][4*index+ry%4];
          if ((ry == 171)&&(m == 3)) term = 21;
          if ((ry == 181)&&(m == 5)) term = 21;
          return term;
       }
       public String toString() {
          StringBuffer buf = new StringBuffer();
          buf.append("Gregorian Year: "+gregorianYear+"/n");
          buf.append("Gregorian Month: "+gregorianMonth+"/n");
          buf.append("Gregorian Date: "+gregorianDate+"/n");
          buf.append("Is Leap Year: "+isGregorianLeap+"/n");
          buf.append("Day of Year: "+dayOfYear+"/n");
          buf.append("Day of Week: "+dayOfWeek+"/n");
          buf.append("Chinese Year: "+chineseYear+"/n");
          buf.append("Heavenly Stem: "+((chineseYear-1)%10)+"/n");
          buf.append("Earthly Branch: "+((chineseYear-1)%12)+"/n");
          buf.append("Chinese Month: "+chineseMonth+"/n");
          buf.append("Chinese Date: "+chineseDate+"/n");
          buf.append("Sectional Term: "+sectionalTerm+"/n");
          buf.append("Principle Term: "+principleTerm+"/n");
          return buf.toString();
       }
       public String[] getYearTable() {
          setGregorian(gregorianYear,1,1);
          computeChineseFields();
          computeSolarTerms();
          String[] table = new String[58]; // 6*9 + 4
          table[0] = getTextLine(27, "公歷年歷:"+gregorianYear);
          table[1] = getTextLine(27, "農歷年歷:"+(chineseYear+1)
             + " ("+stemNames[(chineseYear+1-1)%10]
             + branchNames[(chineseYear+1-1)%12]
             + " - "+animalNames[(chineseYear+1-1)%12]+"年)");
          int ln = 2;
          String blank  = "                                         "
                  +"  " + "                                         ";
          String[] mLeft = null;
          String[] mRight = null;
          for (int i=1; i<=6; i++) {
             table[ln] = blank;
             ln++;
             mLeft = getMonthTable();
             mRight = getMonthTable();
             for (int j=0; j<mLeft.length; j++) {
                String line = mLeft[j] + "  " + mRight[j];
                table[ln] = line;
                ln++;
             }
          }
          table[ln] = blank;
          ln++;
          table[ln] = getTextLine(0,
             "##/## - 公歷日期/農歷日期,(*)#月 - (閏)農歷月第一天");
          ln++;
          return table;
       }
       public static String getTextLine(int s, String t) {
          String str  = "                                         "
                  +"  " + "                                         ";
          if (t!=null && s<str.length() && s+t.length()<str.length())
             str = str.substring(0,s) + t + str.substring(s+t.length());
          return str;
       }
       private static String[] monthNames =
          {"一","二","三","四","五","六","七","八","九","十","十一","十二"};
       public String[] getMonthTable() {
          setGregorian(gregorianYear,gregorianMonth,1);
          computeChineseFields();
          computeSolarTerms();
          String[] table = new String[8];
          String title  = null;
          if (gregorianMonth<11) title  = "                   ";
          else title  = "                 ";
          title = title + monthNames[gregorianMonth-1] + "月"
                        + "                   ";
          String header = "   日    一    二    三    四    五    六 ";
          String blank  = "                                          ";
          table[0] = title;
          table[1] = header;
          int wk = 2;
          String line = "";
          for (int i=1; i<dayOfWeek; i++) {
             line += "     " + ' ';
          }
          int days = daysInGregorianMonth(gregorianYear,gregorianMonth);
          for (int i=gregorianDate; i<=days; i++) {
             line += getDateString() + ' ';
             rollUpOneDay();
             if (dayOfWeek==1) {
                table[wk] = line;
                line = "";
                wk++;
             }
          }
          for (int i=dayOfWeek; i<=7; i++) {
             line += "     " + ' ';
          }
          table[wk] = line;
          for (int i=wk+1; i<table.length; i++) {
             table[i] = blank;
          }
          for (int i=0; i<table.length; i++) {
             table[i] = table[i].substring(0,table[i].length()-1);
          }
         
          return table;
       }
       private static String[] chineseMonthNames =
          {"正","二","三","四","五","六","七","八","九","十","冬","臘"};
       private static String[] principleTermNames =
          {"雨水","春分","谷雨","夏滿","夏至","大暑","處暑","秋分","霜降",
           "小雪","冬至","大寒"};
       private static String[] sectionalTermNames =
          {"立春","驚蟄","清明","立夏","芒種","小暑","立秋","白露","寒露",
           "立冬","大雪","小寒"};
       public String getDateString() {
          String str = "*  /  ";
          String gm = String.valueOf(gregorianMonth);
          if (gm.length()==1) gm = ' ' + gm;
          String cm = String.valueOf(Math.abs(chineseMonth));
          if (cm.length()==1) cm = ' ' + cm;
          String gd = String.valueOf(gregorianDate);
          if (gd.length()==1) gd = ' ' + gd;
          String cd = String.valueOf(chineseDate);
          if (cd.length()==1) cd = ' ' + cd;
          if (gregorianDate==sectionalTerm) {
             str = " "+sectionalTermNames[gregorianMonth-1];
          } else if (gregorianDate==principleTerm) {
             str = " "+principleTermNames[gregorianMonth-1];
          } else if (chineseDate==1 && chineseMonth>0) {
            str = " "+chineseMonthNames[chineseMonth-1]+"月";
          } else if (chineseDate==1 && chineseMonth<0) {
            str = "*"+chineseMonthNames[-chineseMonth-1]+"月";
          } else {
            str = gd+'/'+cd;
          }
          return str;
       }
       public int rollUpOneDay() {
          dayOfWeek = dayOfWeek%7 + 1;
          dayOfYear++;
          gregorianDate++;
          int days = daysInGregorianMonth(gregorianYear,gregorianMonth);
          if (gregorianDate>days) {
             gregorianDate = 1;
             gregorianMonth++;
             if (gregorianMonth>12) {
                gregorianMonth = 1;
                gregorianYear++;
                dayOfYear = 1;
                isGregorianLeap = isGregorianLeapYear(gregorianYear);
             }
             sectionalTerm = sectionalTerm(gregorianYear,gregorianMonth);
             principleTerm = principleTerm(gregorianYear,gregorianMonth);
          }
          chineseDate++;
          days = daysInChineseMonth(chineseYear,chineseMonth);
          if (chineseDate>days) {
             chineseDate = 1;
             chineseMonth = nextChineseMonth(chineseYear,chineseMonth);
             if (chineseMonth==1) chineseYear++;
          }
          return 0;
       }
    }

    中國二百年年歷 1901 年至 2100 年

    我用上面這個程式制作了二百年年歷,1901 年至 2100 年,全部收錄在這本書中。

    年歷格式說明:

        * 農歷日期列在公歷日期后面。
        * 節氣用節氣名稱標明。
        * 農歷每月第一天用月份名稱標明。

    例如,2000 年一月的表達格式如下:

                       一月                 
       日    一    二    三    四    五    六
                                         1/25
     2/26  3/27  4/28  5/29  立春  臘月  8/ 2
     9/ 3 10/ 4 11/ 5 12/ 6 13/ 7 14/ 8 15/ 9
    16/10 17/11 18/12 19/13 20/14  雨水 22/16
    23/17 24/18 25/19 26/20 27/21 28/22 29/23
    30/24 31/25                             

    其中:

        * "1/25" - 表示公歷 1 號和農歷 25 號。
        * "立春" - 表示節氣。
        * "臘月" - 表示農歷 12 月第一天。

    posted on 2011-09-28 10:34 SIMONE 閱讀(378) 評論(0)  編輯  收藏 所屬分類: JAVA
    主站蜘蛛池模板: 亚洲AV日韩精品久久久久久| 国产免费资源高清小视频在线观看| 亚洲jjzzjjzz在线播放| 亚洲av无码成人精品区| 久久青青草原国产精品免费| 免费激情网站国产高清第一页| 亚洲免费视频在线观看| 在线观看亚洲精品福利片| 国产大片51精品免费观看| 成人奭片免费观看| www视频免费看| 曰批全过程免费视频网址| 免费A级毛片av无码| 日韩免费在线视频| 小草在线看片免费人成视久网| 野花香高清在线观看视频播放免费| 草久免费在线观看网站| 亚洲毛片免费视频| 亚洲AV无码成人精品区在线观看| 亚洲人午夜射精精品日韩| 日韩免费高清视频网站| 国产又粗又猛又爽又黄的免费视频| 宅男666在线永久免费观看| 在线jlzzjlzz免费播放| 免费一级毛片正在播放| 亚洲国产婷婷综合在线精品| 亚洲老妈激情一区二区三区| 久久精品国产亚洲AV麻豆网站| 亚洲综合色7777情网站777| 国产亚洲精品AAAA片APP| 中美日韩在线网免费毛片视频| 最近免费2019中文字幕大全| 少妇高潮太爽了在线观看免费| 免费高清av一区二区三区| 亚洲日本一区二区三区在线不卡| 亚洲尤码不卡AV麻豆| 国产片免费福利片永久| 亚洲AV无码乱码在线观看裸奔 | 一级做a爰片久久免费| 99免费在线观看视频| 免费永久国产在线视频|