一个牛逼到渣的程序。

*因为要加很多的数据,所以用宏来添加算了
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 .

ABAP实现农历转成公历相关推荐

  1. Java 公历转农历,然后农历减一年(或者几天或者任意天),再把这个日期转成公历...

    由于系统的提醒有可能是农历的今天或指定时间要用quartz 实现定时任务 公历转农历,然后农历减一年(或者几天或者任意天),再把这个日期转成公历. 网上很多农历转公历的程序都有问题,QQ.百度的也有 ...

  2. vba,自定义公式,农历互转公历,excel ,wps

    'vba 模块内容如下 自定义公式 '公历转农历模块 '原创:互联网 '修正:'// 农历数据定义 // '先以 H2B 函数还原成长度为 18 的字符串,其定义如下: '前12个字节代表1-12月: ...

  3. Python将农历日期转换为公历日期

    from lunardate import LunarDate# 获取农历日期输入 lunar_year = int(input("请输入农历年份:")) lunar_month ...

  4. java 农历节日 转公历日期_公历农历互相转换的Java日历工具类

    /** * 工具类,实现公农历互转 */ public class LunarCalendar { /** * 支持转换的最小农历年份 */ public static final int MIN_Y ...

  5. Java 公历转农历,然后农历减一年(或者几天或者任意天),再把这个日期转成公历

  6. C# 查农历 阴历 阳历 公历 节假日

    using System; using System.Collections.Generic; using System.Text; namespace calendar {     class Ch ...

  7. js 根据公历日期 算出农历_根据公历日期计算农历年生肖及公历转换农历的方法...

    本帖最后由 wshcw 于 2011-12-6 23:23 编辑 有部分E友都知道,农历格式"[$-130000]e-m-d"转换出来的结果有好大一部分有误,那有没有其它转换办法呢 ...

  8. python万年历差农历程序_公历转农历的python实现

    1 #lunar.py 2 # 2015/02/27 罗兵 3 importdatetime4 5 classLunar(object):6 #**************************** ...

  9. mysql将公历农历转换_php 公历农历如何实现转换

    php公历农历转换的实现方法:首先创建一个PHP示例文件,并设置该文件的编码为"utf-8":然后引入"lunar.php":接着通过"$lunar- ...

最新文章

  1. paddleocr win10 编译
  2. 离群点检测算法——LOF(Local Outlier Factor)
  3. 总结 | 如何测试你自己的 RubyGem
  4. 怎样把java换主题_java – 如何在切换主题时考虑变化?
  5. 变电站计算机监控系统的作用和工作原理,变电站计算机监控系统的主要功能.pdf...
  6. confluence 编辑器加载_Onlyoffice集成Confluence的工作原理
  7. 猿课python 第三天
  8. agilebpm脑图_设计开发平台前端框架介绍 | AgileBPM 敏捷工作流开发平台—开源免费-基于 Activiti 工作流引擎、Flowable...
  9. python控制台动画,如何使用Python 3.x在控制台应用程序中创建ASCII动画?
  10. NERO8.0刻录系统光盘
  11. Ribbon界面开发(C++)
  12. 回答阿里云实名认证常见问题
  13. 强势破圈!时尚COSMO联合百度与小红书发布中国美妆地图、美妆种草度白皮书
  14. 从巴菲特身上学习到的投资哲学
  15. 测试用例的设计-提高测试覆盖率
  16. android荣耀不弹出获取权限提醒,荣耀手机怎么设置锁屏消息提示?附不提示的解决方法...
  17. 趣味博弈论——斐波那契博弈
  18. 专业的在线考试系统,快考题,全面聚集多场景考试业务
  19. 机器学习项目入门篇:一个完整的机器学习项目
  20. 聚焦计算机视觉前沿,蚂蚁技术研究院4篇论文入选顶会NeurIPS

热门文章

  1. 招不到产品经理?送你160000+产品经理
  2. 大咖分享会 | 百度首次揭秘如何构建用户画像与移动统计
  3. oracle集群图例
  4. 性能测试的概念及其分类
  5. PostgreSQL在何处处理 sql查询之五十一
  6. ▲我的css架构理念
  7. cmd非运行完再保存,结果显示保存同时进行
  8. 第5章-Vue.js交互及生命周期练习
  9. [JAVA] String常用方法
  10. 我的春招求职经验分享(已拿阿里京东网易等 5 个 offer)