这是一段生成农历的算法那位大侠帮忙注释一下,好多看不董的,不胜感激
主要注释一下calElement,getChinaDate方法
数组lunarInfo是怎么算出来的?
offset算出来的是什么?
nongDate中的每个元素都是什么? public class LunarCalendar { final private static long[] lunarInfo = new long[] { 0x04bd8, 0x04ae0, 0x0a570,
0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,
0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0,
0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50,
0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566,
0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0,
0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4,
0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550,
0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950,
0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260,
0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0,
0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,
0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40,
0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3,
0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960,
0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0,
0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9,
0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0,
0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65,
0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0,
0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2,
0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 };
final private static int[] year20 = new int[] { 1, 4, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };
final private static int[] year19 = new int[] { 0, 3, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 };
final private static int[] year2000 = new int[] { 0, 3, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };
private final static String[] nStr1 = new String[]{"","正","二","三","四","五","六","七","八","九","十","十一","十二"}; private final static String[] Gan=new String[]{"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
private final static String[] Zhi=new String[]{"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
private final static String[] Animals=new String[]{"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};
final private static int lYearDays(int y){
int i, sum = 348;
for (i = 0x8000; i > 0x8; i >>= 1) {
if ((lunarInfo[y - 1900] & i) != 0)
sum += 1;
}
return (sum + leapDays(y));
} final private static int leapDays(int y){
if (leapMonth(y) != 0) {
if ((lunarInfo[y - 1900] & 0x10000) != 0)
return 30;
else
return 29;
} else
return 0;
} final private static int leapMonth(int y){
return (int) (lunarInfo[y - 1900] & 0xf);
} final private static int monthDays(int y, int m){
if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)
return 29;
else
return 30;
} final private static String AnimalsYear(int y){
return Animals[(y - 4) % 12];
} final private static String cyclicalm(int num)
{
return (Gan[num % 10] + Zhi[num % 12]);
} final private static String cyclical(int y){
int num = y - 1900 + 36;
return (cyclicalm(num));
} final private static long[] calElement(int y, int m, int d)
{
long[] nongDate = new long[7];
int i = 0, temp = 0, leap = 0;
//Date baseDate = new Date(0, 0, 31);
Date baseDate = new GregorianCalendar(0+1900,0,31).getTime();
//Date objDate = new Date(y - 1900, m - 1, d);
Date objDate = new GregorianCalendar(y,m-1,d).getTime();
long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;
nongDate[5] = offset + 40;
nongDate[4] = 14;
for (i = 1900; i < 2050 && offset > 0; i++) {
temp = lYearDays(i);
offset -= temp;
nongDate[4] += 12;
}
if (offset < 0) {
offset += temp;
i--;
nongDate[4] -= 12;
}
nongDate[0] = i;
nongDate[3] = i - 1864;
leap = leapMonth(i); // 闰哪个月
nongDate[6] = 0; for (i = 1; i < 13 && offset > 0; i++) {
// 闰月
if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) {
--i;
nongDate[6] = 1;
temp = leapDays((int) nongDate[0]);
} else {
temp = monthDays((int) nongDate[0], i);
} // 解除闰月
if (nongDate[6] == 1 && i == (leap + 1))
nongDate[6] = 0;
offset -= temp;
if (nongDate[6] == 0)
nongDate[4]++;
} if (offset == 0 && leap > 0 && i == leap + 1) {
if (nongDate[6] == 1) {
nongDate[6] = 0;
} else {
nongDate[6] = 1;
--i;
--nongDate[4];
}
}
if (offset < 0) {
offset += temp;
--i;
--nongDate[4];
}
nongDate[1] = i;
nongDate[2] = offset + 1;
return nongDate;
} private final static String getChinaDate(int day) {
String a = "";
if (day == 10)
return "初十";
if(day==20)
return "二十";
if(day==30)
return "三十";
int two = (int) ((day) / 10);
if (two == 0)
a = "初";
if (two == 1)
a = "十";
if (two == 2)
a = "廿";
if (two == 3)
a = "三";
int one = (int) (day % 10);
switch (one) {
case 1:
a += "一";
break;
case 2:
a += "二";
break;
case 3:
a += "三";
break;
case 4:
a += "四";
break;
case 5:
a += "五";
break;
case 6:
a += "六";
break;
case 7:
a += "七";
break;
case 8:
a += "八";
break;
case 9:
a += "九";
break;
}
return a;
}
}
主要注释一下calElement,getChinaDate方法
数组lunarInfo是怎么算出来的?
offset算出来的是什么?
nongDate中的每个元素都是什么? public class LunarCalendar { final private static long[] lunarInfo = new long[] { 0x04bd8, 0x04ae0, 0x0a570,
0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,
0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0,
0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50,
0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566,
0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0,
0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4,
0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550,
0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950,
0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260,
0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0,
0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,
0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40,
0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3,
0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960,
0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0,
0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9,
0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0,
0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65,
0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0,
0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2,
0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 };
final private static int[] year20 = new int[] { 1, 4, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };
final private static int[] year19 = new int[] { 0, 3, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0 };
final private static int[] year2000 = new int[] { 0, 3, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1 };
private final static String[] nStr1 = new String[]{"","正","二","三","四","五","六","七","八","九","十","十一","十二"}; private final static String[] Gan=new String[]{"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
private final static String[] Zhi=new String[]{"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
private final static String[] Animals=new String[]{"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};
final private static int lYearDays(int y){
int i, sum = 348;
for (i = 0x8000; i > 0x8; i >>= 1) {
if ((lunarInfo[y - 1900] & i) != 0)
sum += 1;
}
return (sum + leapDays(y));
} final private static int leapDays(int y){
if (leapMonth(y) != 0) {
if ((lunarInfo[y - 1900] & 0x10000) != 0)
return 30;
else
return 29;
} else
return 0;
} final private static int leapMonth(int y){
return (int) (lunarInfo[y - 1900] & 0xf);
} final private static int monthDays(int y, int m){
if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0)
return 29;
else
return 30;
} final private static String AnimalsYear(int y){
return Animals[(y - 4) % 12];
} final private static String cyclicalm(int num)
{
return (Gan[num % 10] + Zhi[num % 12]);
} final private static String cyclical(int y){
int num = y - 1900 + 36;
return (cyclicalm(num));
} final private static long[] calElement(int y, int m, int d)
{
long[] nongDate = new long[7];
int i = 0, temp = 0, leap = 0;
//Date baseDate = new Date(0, 0, 31);
Date baseDate = new GregorianCalendar(0+1900,0,31).getTime();
//Date objDate = new Date(y - 1900, m - 1, d);
Date objDate = new GregorianCalendar(y,m-1,d).getTime();
long offset = (objDate.getTime() - baseDate.getTime()) / 86400000L;
nongDate[5] = offset + 40;
nongDate[4] = 14;
for (i = 1900; i < 2050 && offset > 0; i++) {
temp = lYearDays(i);
offset -= temp;
nongDate[4] += 12;
}
if (offset < 0) {
offset += temp;
i--;
nongDate[4] -= 12;
}
nongDate[0] = i;
nongDate[3] = i - 1864;
leap = leapMonth(i); // 闰哪个月
nongDate[6] = 0; for (i = 1; i < 13 && offset > 0; i++) {
// 闰月
if (leap > 0 && i == (leap + 1) && nongDate[6] == 0) {
--i;
nongDate[6] = 1;
temp = leapDays((int) nongDate[0]);
} else {
temp = monthDays((int) nongDate[0], i);
} // 解除闰月
if (nongDate[6] == 1 && i == (leap + 1))
nongDate[6] = 0;
offset -= temp;
if (nongDate[6] == 0)
nongDate[4]++;
} if (offset == 0 && leap > 0 && i == leap + 1) {
if (nongDate[6] == 1) {
nongDate[6] = 0;
} else {
nongDate[6] = 1;
--i;
--nongDate[4];
}
}
if (offset < 0) {
offset += temp;
--i;
--nongDate[4];
}
nongDate[1] = i;
nongDate[2] = offset + 1;
return nongDate;
} private final static String getChinaDate(int day) {
String a = "";
if (day == 10)
return "初十";
if(day==20)
return "二十";
if(day==30)
return "三十";
int two = (int) ((day) / 10);
if (two == 0)
a = "初";
if (two == 1)
a = "十";
if (two == 2)
a = "廿";
if (two == 3)
a = "三";
int one = (int) (day % 10);
switch (one) {
case 1:
a += "一";
break;
case 2:
a += "二";
break;
case 3:
a += "三";
break;
case 4:
a += "四";
break;
case 5:
a += "五";
break;
case 6:
a += "六";
break;
case 7:
a += "七";
break;
case 8:
a += "八";
break;
case 9:
a += "九";
break;
}
return a;
}
}
import java.util.*;
public class NongLi
{
final static long[] lunarInfo=new long[]
{
0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,
0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,
0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,
0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,
0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,
0x06ca0,0x0b550,0x15355,0x04da0,0x0a5d0,0x14573,0x052d0,0x0a9a8,0x0e950,0x06aa0,
0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,
0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b5a0,0x195a6,
0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,
0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x055c0,0x0ab60,0x096d5,0x092e0,
0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,
0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,
0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,
0x05aa0,0x076a3,0x096d0,0x04bd7,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,
0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0
};final public static int lYearDays(int y)//====== 传回农历 y年的总天数
{
int i,sum = 348;
for(i=0x8000; i>0x8; i>>=1)
{
if ((lunarInfo[y-1900] & i)!=0) sum+=1;
}
return(sum+leapDays(y));
}final public static int leapDays(int y)//====== 传回农历 y年闰月的天数
{
if(leapMonth(y)!=0)
{
if ((lunarInfo[y-1900] & 0x10000)!=0) return 30;
else return 29;
}
else return 0;
}final public static int leapMonth(int y)//====== 传回农历 y年闰哪个月 1-12 , 没闰传回 0
{
return (int)(lunarInfo[y-1900] & 0xf);
}
final public static int monthDays(int y,int m)//====== 传回农历 y年m月的总天数
{
if ((lunarInfo[y-1900] & (0x10000>>m))==0) return 29;
else return 30;
}final public static String AnimalsYear(int y)//====== 传回农历 y年的生肖
{
final String[] Animals=new String[] {"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};
return Animals[(y-4)%12];
}final public static String cyclicalm(int num)//====== 传入 月日的offset 传回干支, 0=甲子
{
final String[] Gan=new String[] {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
final String[] Zhi=new String[] {"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"};
return (Gan[num%10]+Zhi[num%12]);
}final public static String cyclical(int y)//====== 传入 offset 传回干支, 0=甲子
{
int num=y-1900+36;
return (cyclicalm(num));
}final public long[] Lunar(int y,int m)//传出农历.year0 .month1 .day2 .yearCyl3 .monCyl4
// .dayCyl5 .isLeap6
{
final int[] year20=new int[]{1,4,1,2,1,2,1,1,2,1,2,1};
final int[] year19=new int[]{0,3,0,1,0,1,0,0,1,0,1,0};
final int[] year2000=new int[]{0,3,1,2,1,2,1,1,2,1,2,1};
long[] nongDate = new long[7];
int i=0,temp=0,leap=0;
Date baseDate =new Date(1900,1,31);
Date objDate =new Date(y,m,1);
long offset = (objDate.getTime()-baseDate.getTime())/86400000L;
if (y<2000) offset+=year19[m-1];
if (y>2000) offset+=year20[m-1];
if (y==2000) offset+=year2000[m-1];
nongDate[5] = offset + 40;
nongDate[4] = 14;
for(i=1900; i<2050 && offset>0; i++) {
temp = lYearDays(i);
offset -= temp;
nongDate[4] += 12;
}
if(offset<0) {
offset += temp;
i--;
nongDate[4] -= 12;
}
nongDate[0] = i;
nongDate[3] = i-1864;
leap = leapMonth(i); //闰哪个月
nongDate[6] = 0;
for(i=1; i<13 && offset>0; i++) {
//闰月
if(leap>0 && i==(leap+1) && nongDate[6]==0)
{ --i; nongDate[6] = 1; temp = leapDays((int) nongDate[0]); }
else
{ temp = monthDays((int) nongDate[0],i); }
//解除闰月
if(nongDate[6]==1 && i==(leap+1)) nongDate[6] = 0;
offset -= temp;
if(nongDate[6] == 0) nongDate[4] ++;
}
if(offset==0 && leap>0 && i==leap+1){
if(nongDate[6]==1)
{ nongDate[6] = 0; }
else
{ nongDate[6] = 1; --i; --nongDate[4];}
}
if(offset<0){ offset += temp; --i; --nongDate[4]; }
nongDate[1] = i;
nongDate[2] = offset + 1;
return nongDate;
}
final public static long[] calElement(int y,int m,int d)
//传出y年m月d日对应的农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6
{
long[] nongDate = new long[7];
int i=0,temp=0,leap=0;
Date baseDate = new Date(0,0,31);
Date objDate = new Date(y-1900,m-1,d);
long offset = (objDate.getTime()-baseDate.getTime())/86400000L;
nongDate[5] = offset + 40;
nongDate[4] = 14;
for(i=1900; i<2050 && offset>0; i++) {
temp = lYearDays(i);
offset -= temp;
nongDate[4] += 12;
}
if(offset<0) {
offset += temp;
i--;
nongDate[4] -= 12;
}
nongDate[0] = i;
nongDate[3] = i-1864;
leap = leapMonth(i); //闰哪个月
nongDate[6] = 0;
for(i=1; i<13 && offset>0; i++) {
//闰月
if(leap>0 && i==(leap+1) && nongDate[6]==0)
{ --i; nongDate[6] = 1; temp = leapDays((int)nongDate[0]); }
else
{ temp = monthDays((int)nongDate[0],i); }
//解除闰月
if(nongDate[6]==1 && i==(leap+1)) nongDate[6] = 0;
offset -= temp;
if(nongDate[6] == 0) nongDate[4] ++;
}
if(offset==0 && leap>0 && i==leap+1){
if(nongDate[6]==1)
{ nongDate[6] = 0; }
else
{ nongDate[6] = 1; --i; --nongDate[4];}
}
if(offset<0){ offset += temp; --i; --nongDate[4]; }
nongDate[1] = i;
nongDate[2] = offset + 1;
return nongDate;
} public static String getchina(int day){
String a = "";
if(day==10)
return "初十";
int two = (int)((day)/10);
if(two==0)
a = "初";
if(two==1)
a = "十";
if(two==2)
a = "廿";
if(two==2)
a = "卅";
int one = (int)(day%10);
switch(one){
case 1:a += "一";break;
case 2:a += "二";break;
case 3:a += "三";break;
case 4:a += "四";break;
case 5:a += "五";break;
case 6:a += "六";break;
case 7:a += "七";break;
case 8:a += "八";break;
case 9:a += "九";break;
}
return a;
}//传出y年m月d日对应的农历.year0 .month1 .day2 .yearCyl3 .monCyl4 .dayCyl5 .isLeap6
public static void main(String[] args)
{
Calendar cld = Calendar.getInstance();
int year = cld.get(Calendar.YEAR);
int month = cld.get(Calendar.MONTH)+1;
int day = cld.get(Calendar.DAY_OF_MONTH);
String week = "";
long[] l = calElement(year,month,day);
switch(cld.get(Calendar.DAY_OF_WEEK)){
case 1:week = "日";break;
case 2:week = "一";break;
case 3:week = "二";break;
case 4:week = "三";break;
case 5:week = "四";break;
case 6:week = "五";break;
case 7:week = "六";break;
}
String n = "";
switch((int)(l[1])){
case 1:n="一";break;
case 2:n="二";break;
case 3:n="三";break;
case 4:n="四";break;
case 5:n="五";break;
case 6:n="六";break;
case 7:n="七";break;
case 8:n="八";break;
case 9:n="九";break;
case 10:n="十";break;
case 11:n="十一";break;
case 12:n="十二";break;
}
try {
String a = "北京时间: "+year+"年"+month+"月"+day+"日
星期"+week+" 农历"+n+"月"+getchina((int)(l[2]));
String b = "北京时间: "+year+"年"+month+"月"+day+"日 星期"+week+" 农历"+n+"月"+getchina((int)(l[2]));
BufferedWriter outout = new BufferedWriter(new FileWriter("rili.html",false));
outout.write(a);
System.out.println(a);
outout.close();
} catch (Exception e) {e.printStackTrace();}
}
}运行结果:
C:\java>java NongLi
北京时间: 2007年2月5日<br/>星期一 农历十二月十八网上找了个代注释的,你看看还顶用?
“psyl”还有什么好意见没?
谢谢!!!
0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,
0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0,
0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50,
0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566,
0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0,
0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4,
0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550,
0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950,
0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260,
0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0,
0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,
0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40,
0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3,
0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960,
0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0,
0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9,
0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0,
0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65,
0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0,
0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2,
0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0 }; 关于这个我了解一点,这个是指闰年和闰的月份。0x04bd8 是1900年把0x04bd8转成二进制可以判断闰月在几月。
1-4位: 表示当年有无闰年,有的话,为闰月的月份,没有的话,为0。5-16位:为除了闰月外的正常月份是大月还是小月,1为30天,0为29天。 注意:从1月到12月对应的是第16位到第5位。17-20位: 表示闰月是大月还是小月,仅当存在闰月的情况下有意义其他没认真看。 希望有帮助。
比如0x04bd8转换成二进制是0000 0100 1011 1101 1000
1-4位: 表示当年有无闰年,有的话,为闰月的月份,没有的话,为0。
( 这个还好理解) 5-16位:为除了闰月外的正常月份是大月还是小月,1为30天,0为29天。
注意:从1月到12月对应的是第16位到第5位。
(这个就不是很董0100 1011 1101,你这里说的1是指那个,0又是指那个)
17-20位: 表示闰月是大月还是小月,仅当存在闰月的情况下有意义
(这里表示是大月还是小月应该只有2种情况啊,怎么17-20位有好几种情况啊) "psyl"如果有时间的话在帮忙解释一下,可以吗?
谢谢!!!
那位大侠知道也帮忙解释一下, 谢谢!!!