[转]SAP ABAP实现农历转成公历(With Code Sample)
2009-06-30 12:56
447 查看
********************************************************************** *Author: chunbo.xu *Version: 1.0 *Create date: 2005/07/25 *If you have any problems ,contact me: *msn:xuchunbo0901@hotmail.com *email:xuchunbo0901@hotmail.com *If you send it to another field, please write where it created *********************************************************************** REPORT Z_CALLENDAR . *因为要加很多的数据,所以用宏来添加算了 DEFINE ADD_TABLE . &1-NAME = &2 . APPEND &1 . END-OF-DEFINITION . *这里是天干的表 DATA: BEGIN OF R_TIANGAN, NAME(2) TYPE C , END OF R_TIANGAN . DATA: I_TIANGAN LIKE R_TIANGAN OCCURS 0 WITH HEADER LINE . *这里是地支的表 DATA: BEGIN OF R_DIZHI, NAME(2) TYPE C , END OF R_DIZHI . DATA: I_DIZHI LIKE R_DIZHI OCCURS 0 WITH HEADER LINE . *这里是属相表,不过我也没有用,如果谁想用可以添加功能 DATA: BEGIN OF R_SHUXIANG, NAME(2) TYPE C, END OF R_SHUXIANG . DATA: I_SHUXIANG LIKE R_SHUXIANG OCCURS 0 WITH HEADER LINE. *这里是天的名字,初一……… DATA: BEGIN OF R_DAYNAME , NAME(4) TYPE C , END OF R_DAYNAME . DATA: I_DAYNAME LIKE R_DAYNAME OCCURS 0 WITH HEADER LINE . *这里是月的名字,正月……… DATA: BEGIN OF R_MONNAME , NAME(2) TYPE C , END OF R_MONNAME . DATA: I_MONNAME LIKE R_MONNAME OCCURS 0 WITH HEADER LINE . *这里是月的差额数据 DATA: BEGIN OF R_MONTHADD , NAME TYPE I , END OF R_MONTHADD . DATA: I_MONTHADD LIKE R_MONTHADD OCCURS 0 WITH HEADER LINE . *这里就是农历转换表的数据,每100一更新 DATA: BEGIN OF R_NONGLIDATA, NAME TYPE I , END OF R_NONGLIDATA . DATA: I_NONGLIDATA LIKE R_NONGLIDATA OCCURS 0 WITH HEADER LINE . *这里输入日期,是公历日期 PARAMETER P_DATUM LIKE SY-DATUM . START-OF-SELECTION . **加数据,就不用多说了 ADD_TABLE I_TIANGAN '甲' . ADD_TABLE I_TIANGAN '乙' . ADD_TABLE I_TIANGAN '丙' . ADD_TABLE I_TIANGAN '丁' . ADD_TABLE I_TIANGAN '戊' . ADD_TABLE I_TIANGAN '己' . ADD_TABLE I_TIANGAN '庚' . ADD_TABLE I_TIANGAN '辛' . ADD_TABLE I_TIANGAN '壬' . ADD_TABLE I_TIANGAN '癸' . ADD_TABLE I_DIZHI '子'. ADD_TABLE I_DIZHI '丑'. ADD_TABLE I_DIZHI '寅'. ADD_TABLE I_DIZHI '卯'. ADD_TABLE I_DIZHI '辰'. ADD_TABLE I_DIZHI '巳'. ADD_TABLE I_DIZHI '午'. ADD_TABLE I_DIZHI '未'. ADD_TABLE I_DIZHI '申'. ADD_TABLE I_DIZHI '酉'. ADD_TABLE I_DIZHI '戌'. ADD_TABLE I_DIZHI '亥'. ADD_TABLE I_SHUXIANG '鼠' . ADD_TABLE I_SHUXIANG '牛' . ADD_TABLE I_SHUXIANG '虎' . ADD_TABLE I_SHUXIANG '兔' . ADD_TABLE I_SHUXIANG '龙' . ADD_TABLE I_SHUXIANG '蛇' . ADD_TABLE I_SHUXIANG '马' . ADD_TABLE I_SHUXIANG '羊' . ADD_TABLE I_SHUXIANG '猴' . ADD_TABLE I_SHUXIANG '鸡' . ADD_TABLE I_SHUXIANG '狗' . ADD_TABLE I_SHUXIANG '猪' . ADD_TABLE I_DAYNAME '初一' . ADD_TABLE I_DAYNAME '初二' . ADD_TABLE I_DAYNAME '初三' . ADD_TABLE I_DAYNAME '初四' . ADD_TABLE I_DAYNAME '初五' . ADD_TABLE I_DAYNAME '初六' . ADD_TABLE I_DAYNAME '初七' . ADD_TABLE I_DAYNAME '初八' . ADD_TABLE I_DAYNAME '初九' . ADD_TABLE I_DAYNAME '初十' . ADD_TABLE I_DAYNAME '十一' . ADD_TABLE I_DAYNAME '十二' . ADD_TABLE I_DAYNAME '十三' . ADD_TABLE I_DAYNAME '十四' . ADD_TABLE I_DAYNAME '十五' . ADD_TABLE I_DAYNAME '十六' . ADD_TABLE I_DAYNAME '十七' . ADD_TABLE I_DAYNAME '十八' . ADD_TABLE I_DAYNAME '十九' . ADD_TABLE I_DAYNAME '二十' . ADD_TABLE I_DAYNAME '廿一' . ADD_TABLE I_DAYNAME '廿二' . ADD_TABLE I_DAYNAME '廿三' . ADD_TABLE I_DAYNAME '廿四' . ADD_TABLE I_DAYNAME '廿五' . ADD_TABLE I_DAYNAME '廿六' . ADD_TABLE I_DAYNAME '廿七' . ADD_TABLE I_DAYNAME '廿八' . ADD_TABLE I_DAYNAME '廿九' . ADD_TABLE I_DAYNAME '三十' . ADD_TABLE I_MONNAME '正' . ADD_TABLE I_MONNAME '二' . ADD_TABLE I_MONNAME '三' . ADD_TABLE I_MONNAME '四' . ADD_TABLE I_MONNAME '五' . ADD_TABLE I_MONNAME '六' . ADD_TABLE I_MONNAME '七' . ADD_TABLE I_MONNAME '八' . ADD_TABLE I_MONNAME '九' . ADD_TABLE I_MONNAME '十' . ADD_TABLE I_MONNAME '冬' . ADD_TABLE I_MONNAME '腊' . ADD_TABLE I_MONTHADD 0 . ADD_TABLE I_MONTHADD 31 . ADD_TABLE I_MONTHADD 59 . ADD_TABLE I_MONTHADD 90 . ADD_TABLE I_MONTHADD 120 . ADD_TABLE I_MONTHADD 151 . ADD_TABLE I_MONTHADD 181 . ADD_TABLE I_MONTHADD 212 . ADD_TABLE I_MONTHADD 243 . ADD_TABLE I_MONTHADD 273 . ADD_TABLE I_MONTHADD 304 . ADD_TABLE I_MONTHADD 334 . ADD_TABLE I_NONGLIDATA 2635 . ADD_TABLE I_NONGLIDATA 333387 . ADD_TABLE I_NONGLIDATA 1701 . ADD_TABLE I_NONGLIDATA 1748 . ADD_TABLE I_NONGLIDATA 267701 . ADD_TABLE I_NONGLIDATA 694 . ADD_TABLE I_NONGLIDATA 2391 . ADD_TABLE I_NONGLIDATA 133423 . ADD_TABLE I_NONGLIDATA 1175 . ADD_TABLE I_NONGLIDATA 396438 . ADD_TABLE I_NONGLIDATA 3402 . ADD_TABLE I_NONGLIDATA 3749 . ADD_TABLE I_NONGLIDATA 331177 . ADD_TABLE I_NONGLIDATA 1453 . ADD_TABLE I_NONGLIDATA 694 . ADD_TABLE I_NONGLIDATA 201326 . ADD_TABLE I_NONGLIDATA 2350 . ADD_TABLE I_NONGLIDATA 465197 . ADD_TABLE I_NONGLIDATA 3221 . ADD_TABLE I_NONGLIDATA 3402 . ADD_TABLE I_NONGLIDATA 400202 . ADD_TABLE I_NONGLIDATA 2901 . ADD_TABLE I_NONGLIDATA 1386 . ADD_TABLE I_NONGLIDATA 267611 . ADD_TABLE I_NONGLIDATA 605 . ADD_TABLE I_NONGLIDATA 2349 . ADD_TABLE I_NONGLIDATA 137515 . ADD_TABLE I_NONGLIDATA 2709 . ADD_TABLE I_NONGLIDATA 464533 . ADD_TABLE I_NONGLIDATA 1738 . ADD_TABLE I_NONGLIDATA 2901 . ADD_TABLE I_NONGLIDATA 330421 . ADD_TABLE I_NONGLIDATA 1242 . ADD_TABLE I_NONGLIDATA 2651 . ADD_TABLE I_NONGLIDATA 199255 . ADD_TABLE I_NONGLIDATA 1323 . ADD_TABLE I_NONGLIDATA 529706 . ADD_TABLE I_NONGLIDATA 3733 . ADD_TABLE I_NONGLIDATA 1706 . ADD_TABLE I_NONGLIDATA 398762 . ADD_TABLE I_NONGLIDATA 2741 . ADD_TABLE I_NONGLIDATA 1206 . ADD_TABLE I_NONGLIDATA 267438 . ADD_TABLE I_NONGLIDATA 2647 . ADD_TABLE I_NONGLIDATA 1318 . ADD_TABLE I_NONGLIDATA 204070 . ADD_TABLE I_NONGLIDATA 3477 . ADD_TABLE I_NONGLIDATA 461653 . ADD_TABLE I_NONGLIDATA 1386 . ADD_TABLE I_NONGLIDATA 2413 . ADD_TABLE I_NONGLIDATA 330077. ADD_TABLE I_NONGLIDATA 1197 . ADD_TABLE I_NONGLIDATA 2637 . ADD_TABLE I_NONGLIDATA 268877 . ADD_TABLE I_NONGLIDATA 3365 . ADD_TABLE I_NONGLIDATA 531109 . ADD_TABLE I_NONGLIDATA 2900 . ADD_TABLE I_NONGLIDATA 2922 . ADD_TABLE I_NONGLIDATA 398042 . ADD_TABLE I_NONGLIDATA 2395 . ADD_TABLE I_NONGLIDATA 1179 . ADD_TABLE I_NONGLIDATA 267415 . ADD_TABLE I_NONGLIDATA 2635 . ADD_TABLE I_NONGLIDATA 661067 . ADD_TABLE I_NONGLIDATA 1701 . ADD_TABLE I_NONGLIDATA 1748 . ADD_TABLE I_NONGLIDATA 398772 . ADD_TABLE I_NONGLIDATA 2742 . ADD_TABLE I_NONGLIDATA 2391 . ADD_TABLE I_NONGLIDATA 330031. ADD_TABLE I_NONGLIDATA 1175 . ADD_TABLE I_NONGLIDATA 1611 . ADD_TABLE I_NONGLIDATA 200010 . ADD_TABLE I_NONGLIDATA 3749 . ADD_TABLE I_NONGLIDATA 527717 . ADD_TABLE I_NONGLIDATA 1452 . ADD_TABLE I_NONGLIDATA 2742 . ADD_TABLE I_NONGLIDATA 332397 . ADD_TABLE I_NONGLIDATA 2350 . ADD_TABLE I_NONGLIDATA 3222 . ADD_TABLE I_NONGLIDATA 268949 . ADD_TABLE I_NONGLIDATA 3402 . ADD_TABLE I_NONGLIDATA 3493 . ADD_TABLE I_NONGLIDATA 133973 . ADD_TABLE I_NONGLIDATA 1386 . ADD_TABLE I_NONGLIDATA 464219 . ADD_TABLE I_NONGLIDATA 605 . ADD_TABLE I_NONGLIDATA 2349 . ADD_TABLE I_NONGLIDATA 334123 . ADD_TABLE I_NONGLIDATA 2709 . ADD_TABLE I_NONGLIDATA 2890 . ADD_TABLE I_NONGLIDATA 267946 . ADD_TABLE I_NONGLIDATA 2773 . ADD_TABLE I_NONGLIDATA 592565 . ADD_TABLE I_NONGLIDATA 1210 . ADD_TABLE I_NONGLIDATA 2651 . ADD_TABLE I_NONGLIDATA 395863 . ADD_TABLE I_NONGLIDATA 1323 . ADD_TABLE I_NONGLIDATA 2707 . ADD_TABLE I_NONGLIDATA 265877 . *都是一些控制变量 DATA: WCY TYPE I , WCM TYPE I , WCD TYPE I . DATA: NTD TYPE I ,NIE TYPE I , L_M TYPE I ,L_I TYPE I , L_K TYPE I ,L_N TYPE I , L_N1 TYPE I , L_NBIT TYPE I . DATA: NONGLI(30) TYPE C , NONGLIDAY(10) TYPE C , SHUXIANG(10) TYPE C . *取得输入的日期 WCY = P_DATUM+0(4) . WCM = P_DATUM+4(2) . WCD = P_DATUM+6(2) . *取得输入的日期到初始日期的天数 DATA: L_NUM TYPE I . READ TABLE I_MONTHADD INDEX WCM . NTD = ( WCY - 1921 ) * 365 + ( WCY - 1921 ) / 4 + WCD + I_MONTHADD-NAME - 38 . *用于判断闰年 L_NUM = WCY MOD 400 . DATA: L_NUM1 TYPE I ,L_NUM2 TYPE I. L_NUM1 = WCY MOD 4 . L_NUM2 = WCY MOD 100 . *如果是闰年而且是2月份以后,则天数加1 IF ( L_NUM = 0 OR ( L_NUM1 = 0 AND L_NUM2 <> 0 ) ) AND WCM > 2 . NTD = NTD + 1 . ENDIF . L_M = 0 . *循环开始,设置一个循环结束标志 WHILE NIE <> 1 . DATA: L_M1 TYPE I . L_M1 = L_M + 1 . READ TABLE I_NONGLIDATA INDEX L_M1 . * 判断是否有闰月,指农历的闰月 IF I_NONGLIDATA-NAME < 4095 . * 没有,则一共有12个月,因为下标从0开始,所以设置成11 L_K = 11 . ELSE . L_K = 12 . ENDIF . L_N = L_K . WHILE L_N >= 0 . READ TABLE I_NONGLIDATA INDEX L_M1 . L_NBIT = I_NONGLIDATA-NAME . L_I = 1 . L_N1 = L_N + 1 . WHILE L_I < L_N1 . L_NBIT = L_NBIT DIV 2 . L_I = L_I + 1 . ENDWHILE . L_NBIT = L_NBIT MOD 2 . DATA: L_NBIT1 TYPE I . L_NBIT1 = L_NBIT + 29 . IF NTD <= L_NBIT1 . NIE = 1 . EXIT . ENDIF . NTD = NTD - 29 - L_NBIT . L_N = L_N - 1 . ENDWHILE . IF NIE = 1 . EXIT . ENDIF. L_M = L_M + 1 . ENDWHILE . WCY = 1921 + L_M . WCM = L_K - L_N + 1 . WCD = NTD . **ok,计算完毕,如果有闰月的话,执行下面一段 IF L_K = 12 . READ TABLE I_NONGLIDATA INDEX L_M . DATA: L_TEMP TYPE I. L_TEMP = I_NONGLIDATA-NAME / 65536 + 1 . IF WCM = L_TEMP . WCM = 1 - WCM . ELSEIF WCM > L_TEMP . WCM = WCM - 1 . ENDIF. ENDIF. *这里就是输出的设置了 L_TEMP = ( ( WCY - 4 ) MOD 60 ) MOD 12 + 1 . DATA: L_TEMP1 TYPE I . L_TEMP1 = ( ( WCY - 4 ) MOD 60 ) MOD 10 + 1 . **取得属相 READ TABLE I_SHUXIANG INDEX L_TEMP . SHUXIANG = I_SHUXIANG-NAME . **取得天干地支 READ TABLE I_DIZHI INDEX L_TEMP . READ TABLE I_TIANGAN INDEX L_TEMP1 . CONCATENATE I_TIANGAN-NAME I_DIZHI-NAME '年' INTO NONGLI . IF WCM < 1 . L_TEMP = -1 * WCM . READ TABLE I_MONNAME INDEX L_TEMP . NONGLIDAY = I_MONNAME-NAME . ELSE . READ TABLE I_MONNAME INDEX WCM . ENDIF. **取得日期,然后输出 READ TABLE I_DAYNAME INDEX WCD . CONCATENATE I_MONNAME-NAME '月' I_DAYNAME-NAME INTO NONGLIDAY . WRITE: NONGLI,NONGLIDAY . |
相关文章推荐
- ASP.NET实现公历转农历的简单方法
- 纯ASP代码之公历转农历实现(含属相)
- Entity Framework6 with Oracle(可实现code first)
- Entity Framework6 with Oracle(可实现code first)
- JavaScript实现公历转换农历
- java 实现公历转农历
- 【转】Entity Framework6 with Oracle(可实现code first)
- 纯ASP代码之公历转农历实现(含属相)
- Entity Framework6 with Oracle(可实现code first)
- 公历转农历模块,虽然是js文件,不过还是提供了实现方法,感谢提供者。
- python3实现万年历(包括公历、农历、节气、节日)
- python3实现万年历(包括公历、农历、节气、节日)
- Entity Framework6 with Oracle(可实现code first)
- 纯ASP代码之公历转农历实现(含属相) --例子代码
- Entity Framework6 with Oracle(可实现code first)
- PHP实现的汉字拼音转换和公历农历转换类及使用示例
- JavaScript实现公历转农历功能示例
- 一个用UpdateLayeredWindow实现窗体半透明的delphi的代码-The realization of a form with translucent UpdateLayeredWindow code delphi
- ABAP实现农历转成公历
- Entity Framework6 with Oracle(可实现code first)