前几天需要用到农历转阳历好用版.docx
- 文档编号:5990266
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:8
- 大小:16.32KB
前几天需要用到农历转阳历好用版.docx
《前几天需要用到农历转阳历好用版.docx》由会员分享,可在线阅读,更多相关《前几天需要用到农历转阳历好用版.docx(8页珍藏版)》请在冰豆网上搜索。
前几天需要用到农历转阳历好用版
前几天需要用到农历转阳历,XX文库和CSDN上下载的跑了后,个别日期都是差一天,有问题。
现在发一个由热心网友 ()改良后的类,与大家分享下。
//实现类
packagecom.java.calendar;
// 自定义日历类
publicclassChineseCalendar{
privatestaticfinalint[]iLunarMonthDaysTable={
0x4ae0,0xa570,0x5268,0xd260,0xd950,0x6aa8,0x56a0,0x9ad0,0x4ae8,0x4ae0,//1910
0xa4d8,0xa4d0,0xd250,0xd548,0xb550,0x56a0,0x96d0,0x95b0,0x49b8,0x49b0,//1920
0xa4b0,0xb258,0x6a50,0x6d40,0xada8,0x2b60,0x9570,0x4978,0x4970,0x64b0,//1930
0xd4a0,0xea50,0x6d48,0x5ad0,0x2b60,0x9370,0x92e0,0xc968,0xc950,0xd4a0,//1940
0xda50,0xb550,0x56a0,0xaad8,0x25d0,0x92d0,0xc958,0xa950,0xb4a8,0x6ca0,//1950
0xb550,0x55a8,0x4da0,0xa5b0,0x52b8,0x52b0,0xa950,0xe950,0x6aa0,0xad50,//1960
0xab50,0x4b60,0xa570,0xa570,0x5260,0xe930,0xd950,0x5aa8,0x56a0,0x96d0,//1970
0x4ae8,0x4ad0,0xa4d0,0xd268,0xd250,0xd528,0xb540,0xb6a0,0x96d0,0x95b0,//1980
0x49b0,0xa4b8,0xa4b0,0xb258,0x6a50,0x6d40,0xada0,0xab60,0x9370,0x4978,//1990
0x4970,0x64b0,0x6a50,0xea50,0x6b28,0x5ac0,0xab60,0x9368,0x92e0,0xc960,//2000
0xd4a8,0xd4a0,0xda50,0x5aa8,0x56a0,0xaad8,0x25d0,0x92d0,0xc958,0xa950,//2010
0xb4a0,0xb550,0xb550,0x55a8,0x4ba0,0xa5b0,0x52b8,0x52b0,0xa930,0x74a8,//2020
0x6aa0,0xad50,0x4da8,0x4b60,0x9570,0xa4e0,0xd260,0xe930,0xd530,0x5aa0,//2030
0x6b50,0x96d0,0x4ae8,0x4ad0,0xa4d0,0xd258,0xd250,0xd520,0xdaa0,0xb5a0,//2040
0x56d0,0x4ad8,0x49b0,0xa4b8,0xa4b0,0xaa50,0xb528,0x6d20,0xada0,0x55b0//2050
};
privatestaticfinalchar[]iLunarLeapMonthTable={0x00,0x50,0x04,0x00,0x20,//1910
0x60,0x05,0x00,0x20,0x70,//1920
0x05,0x00,0x40,0x02,0x06,//1930
0x00,0x50,0x03,0x07,0x00,//1940
0x60,0x04,0x00,0x20,0x70,//1950
0x05,0x00,0x30,0x80,0x06,//1960
0x00,0x40,0x03,0x07,0x00,//1970
0x50,0x04,0x08,0x00,0x60,//1980
0x04,0x0a,0x00,0x60,0x05,//1990
0x00,0x30,0x80,0x05,0x00,//2000
0x40,0x02,0x07,0x00,0x50,//2010
0x04,0x09,0x00,0x60,0x04,//2020
0x00,0x20,0x60,0x05,0x00,//2030
0x30,0xb0,0x06,0x00,0x50,//2040
0x02,0x07,0x00,0x50,0x03//2050
};
privatestaticfinalchar[]iSolarLunarOffsetTable={49,38,28,46,34,24,43,32,21,40,//1910
29,48,36,25,44,34,22,41,31,50,//1920
38,27,46,35,23,43,32,22,40,29,//1930
47,36,25,44,34,23,41,30,49,38,//1940
26,45,35,24,43,32,21,40,28,47,//1950
36,26,44,33,23,42,30,48,38,27,//1960
45,35,24,43,32,20,39,29,47,36,//1970
26,45,33,22,41,30,48,37,27,46,//1980
35,24,43,32,50,39,28,47,36,26,//1990
45,34,22,40,30,49,37,27,46,35,//2000
23,42,31,21,39,28,48,37,25,44,//2010
33,22,41,31,50,39,28,47,35,24,//2020
42,30,21,40,28,47,36,25,43,33,//2030
22,41,30,49,37,26,44,33,23,42,//2040
31,21,40,29,47,36,25,44,32,22,//2050
};
staticbooleanbIsSolarLeapYear(intiYear){
return((iYear%4==0)&&(iYear%100!
=0)||iYear%400==0);
}
// Thedaysinthemonthofsolarcalendar
publicstaticintiGetSYearMonthDays(intiYear,intiMonth){
if((iMonth==1)||(iMonth==3)||(iMonth==5)||(iMonth==7)||(iMonth==8)
||(iMonth==10)||(iMonth==12))
return31;
elseif((iMonth==4)||(iMonth==6)||(iMonth==9)||(iMonth==11))
return30;
elseif(iMonth==2){
if(bIsSolarLeapYear(iYear))
return29;
else
return28;
}else
return0;
}
// TheoffsetdaysfromNewYearandthedaywhenpointoutinsolarcalendar
publicstaticintiGetSNewYearOffsetDays(intiYear,intiMonth,intiDay){
intiOffsetDays=0;
for(inti=1;i iOffsetDays+=iGetSYearMonthDays(iYear,i); } iOffsetDays+=iDay-1; returniOffsetDays; } publicstaticintiGetLLeapMonth(intiYear){ chariMonth=iLunarLeapMonthTable[(iYear-1901)/2]; if(iYear%2==0) return(iMonth&0x0f); else return(iMonth&0xf0)>>4; } publicstaticintiGetLMonthDays(intiYear,intiMonth){ intiLeapMonth=iGetLLeapMonth(iYear); if((iMonth>12)&&(iMonth-12! =iLeapMonth)||(iMonth<0)){ System.out.println("Wrongmonth,^_^,ithinkyouarewanta-1,gotodeath! "); return-1; } if(iMonth-12==iLeapMonth){ if((iLunarMonthDaysTable[iYear-1901]&(0x8000>>iLeapMonth))==0) return29; else return30; } #Android //接上面的代码 if((iLeapMonth>0)&&(iMonth>iLeapMonth)) iMonth++; if((iLunarMonthDaysTable[iYear-1901]&(0x8000>>(iMonth-1)))==0) return29; else return30; } // Daysinthisyearoflunarcalendar publicstaticintiGetLYearDays(intiYear){ intiYearDays=0; intiLeapMonth=iGetLLeapMonth(iYear); for(inti=1;i<13;i++) iYearDays+=iGetLMonthDays(iYear,i); if(iLeapMonth>0) iYearDays+=iGetLMonthDays(iYear,iLeapMonth+12); returniYearDays; } publicstaticintiGetLNewYearOffsetDays(intiYear,intiMonth,intiDay){ intiOffsetDays=0; intiLeapMonth=iGetLLeapMonth(iYear); if((iLeapMonth>0)&&(iLeapMonth==iMonth-12)){ iMonth=iLeapMonth; iOffsetDays+=iGetLMonthDays(iYear,iMonth); } for(inti=1;i iOffsetDays+=iGetLMonthDays(iYear,i); if(i==iLeapMonth) iOffsetDays+=iGetLMonthDays(iYear,iLeapMonth+12); } iOffsetDays+=iDay-1; returniOffsetDays; } // Thesolarcalendaristurnedintothelunarcalendar publicstaticStringsCalendarSolarToLundar(intiYear,intiMonth,intiDay){ intiLDay,iLMonth,iLYear; intiOffsetDays=iGetSNewYearOffsetDays(iYear,iMonth,iDay); intiLeapMonth=iGetLLeapMonth(iYear); if(iOffsetDays iLYear=iYear-1; iOffsetDays=iSolarLunarOffsetTable[iYear-1901]-iOffsetDays; iLDay=iOffsetDays; for(iLMonth=12;iOffsetDays>iGetLMonthDays(iLYear,iLMonth);iLMonth--){ iLDay=iOffsetDays; iOffsetDays-=iGetLMonthDays(iLYear,iLMonth); } if(0==iLDay) iLDay=1; else iLDay=iGetLMonthDays(iLYear,iLMonth)-iOffsetDays+1; }else{ iLYear=iYear; iOffsetDays-=iSolarLunarOffsetTable[iYear-1901]; iLDay=iOffsetDays+1; for(iLMonth=1;iOffsetDays>=0;iLMonth++){ iLDay=iOffsetDays+1; iOffsetDays-=iGetLMonthDays(iLYear,iLMonth); if((iLeapMonth==iLMonth)&&(iOffsetDays>0)){ iLDay=iOffsetDays; iOffsetDays-=iGetLMonthDays(iLYear,iLMonth+12); if(iOffsetDays<=0){ iLMonth+=12+1; break; } } } iLMonth--; } return""+iLYear+"-"+(iLMonth>9? ""+iLMonth: "0"+iLMonth)+ "-"+(iLDay>9? ""+iLDay: "0"+iLDay); } // ThelunarcalendaristurnedintotheSolarcalendar publicstaticStringsCalendarLundarToSolar(intiYear,intiMonth,intiDay){ intiSYear,iSMonth,iSDay; intiOffsetDays=iGetLNewYearOffsetDays(iYear,iMonth,iDay)+ iSolarLunarOffsetTable[iYear-1901]; intiYearDays=bIsSolarLeapYear(iYear)? 366: 365; if(iOffsetDays>=iYearDays){ iSYear=iYear+1; iOffsetDays-=iYearDays; }else{ iSYear=iYear; } iSDay=iOffsetDays+1; for(iSMonth=1;iOffsetDays>=0;iSMonth++){ iSDay=iOffsetDays+1; iOffsetDays-=iGetSYearMonthDays(iSYear,iSMonth); } iSMonth--; return""+iSYear+"-"+(iSMonth>9? iSMonth+"": "0"+iSMonth)+ "-"+(iSDay>9? iSDay+"": "0"+iSDay); } } //测试类 packagecom.java.calendar; publicclassTest{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 前几天 需要 用到 农历 阳历 好用版