Chinaunix首页 | 论坛 | 博客
  • 博客访问: 145970
  • 博文数量: 54
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 508
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-18 09:25
个人简介

好男人就是我,我就是你兵哥

文章分类

全部博文(54)

我的朋友

分类: IT职场

2015-02-10 09:19:49

FUNCTION zfm_get_chinese_date.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IV_DATE) TYPE  SY-DATUM DEFAULT SY-DATUM
*"     REFERENCE(IV_FLAG) TYPE  CHAR1 OPTIONAL
*"  EXPORTING
*"     REFERENCE(EV_DATE) TYPE  SY-DATUM
*"     REFERENCE(EV_DATE_TEXT) TYPE  CHAR20
*"     REFERENCE(EV_ANIMAL_SIGN) TYPE  CHAR10
*"----------------------------------------------------------------------

  DATAlv_year TYPE char4 ,
         lv_month TYPE scmamonth ,
         lv_day TYPE char2,
         lv_year_export TYPE char4 ,
         lv_month_export TYPE scmamonth ,
         lv_day_export TYPE day_nr,
         lv_year_add TYPE char4,
         lv_month_add TYPE char2 ,
         lv_day_add TYPE char3,
         lv_run TYPE c,
         lv_con_date TYPE sy-datum,
         lv_set_date TYPE sy-datum,
         lv_date_export TYPE char20,
         lv_get_day TYPE i.
*  DATA:LR_CONVERT TYPE REF TO CL_RPE_CONVERT.
*  CREATE OBJECT LR_CONVERT.

*取得输入的日期
  lv_year iv_date+0(4.
  lv_month iv_date+4(2.
  lv_day iv_date+6(2.


  DATA:lv_1942 TYPE i.

  IF lv_year < 1900.
    lv_1942 1942 lv_year 19.
    lv_year lv_year + 19 * lv_1942 ).
  ENDIF.

  IF lv_year > 2100.
    lv_1942 lv_year 1942 )  19.
    lv_year lv_year + 19 * lv_1942 ).
  ENDIF.

  DATA:lv_times TYPE i,
       lv_index TYPE i,
       lv_data TYPE i.

  DATA:lv_month_add_int TYPE i,
       lv_data_int TYPE i,
       lv_data_13 TYPE char2,
       lv_string TYPE string,
       lv_string_i TYPE i,
       lv_xstring TYPE xstring.

  lv_year_add lv_year.
*反算
  IF iv_flag 'X'.
    READ TABLE gt_data WITH KEY year lv_year_add.
    IF sy-subrc .
      lv_month_add gt_data-data+14(2)."取农历1.1对应的阳历
      lv_day_add gt_data-data+16(2).
      CONCATENATE lv_year_add lv_month_add lv_day_add INTO lv_con_date.

      lv_day_add lv_day.

      lv_times lv_month 1.

      lv_index 0.
      DO lv_times TIMES"根据差异的月份计算天数
        lv_data gt_data-data+lv_index(1).
        lv_index  lv_index + 1.
        lv_day_add lv_day_add + 29 + lv_data.
      ENDDO.

      lv_set_date lv_con_date + lv_day_add 1.

*是否为闰月,如果为闰月,再加上一遍闰月的天数
      IF gt_data-data+13(1'0'.
        lv_string gt_data-data+13(1).
        CASE lv_string.
          WHEN 'A'.
            lv_string '10'.
          WHEN 'B'.
            lv_string '11'.
          WHEN 'C'.
            lv_string '12'.
        ENDCASE.

        IF lv_string <= lv_month.
          lv_set_date lv_set_date + 29 + gt_data-data+12(1).
        ENDIF.
      ENDIF.

      lv_date_export lv_set_date.
      lv_year_export lv_set_date+0(4.
      lv_month_export lv_set_date+4(2.
      lv_day_export lv_set_date+6(2.
      CONCATENATE lv_year_export lv_month_export lv_day_export INTO ev_date.

      RETURN.
    ENDIF.
  ENDIF.

*初始化
  DO.
    READ TABLE gt_data WITH KEY year lv_year_add.
    IF sy-subrc 0.
      lv_month_add gt_data-data+14(2).
      lv_day_add gt_data-data+16(2).
      CONCATENATE lv_year_add lv_month_add lv_day_add INTO lv_con_date.
      CONCATENATE lv_year lv_month lv_day INTO lv_set_date.

      lv_get_day lv_set_date lv_con_date.

      IF lv_get_day < 0.
        lv_year_add lv_year_add 1."计算跨年的情况
      ELSE.
        EXIT.
      ENDIF.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.



  lv_day_add 1lv_month_add 1.
  DO lv_get_day TIMES.
    lv_day_add lv_day_add + 1.

    READ TABLE gt_data WITH KEY year lv_year_add.
    IF sy-subrc 0.
      lv_month_add_int lv_month_add 1.
      lv_data_int gt_data-data+lv_month_add_int(130.
      lv_data_13 gt_data-data+12(130.

      IF lv_day_add lv_data_int OR lv_run 'X' AND lv_day_add lv_data_13 ).
        lv_string gt_data-data+13(1).
        CASE lv_string.
          WHEN 'A'.
            lv_string '10'.
          WHEN 'B'.
            lv_string '11'.
          WHEN 'C'.
            lv_string '12'.
        ENDCASE.

        IF lv_run '' AND lv_month_add lv_string.
          lv_run 'X'.
        ELSE.
          lv_run ''.
          lv_month_add lv_month_add + 1.
        ENDIF.

        lv_day_add 1.

      ENDIF.
    ENDIF.
  ENDDO.


  lv_year_export lv_year_add.
  lv_month_export lv_month_add.
  lv_day_export lv_day_add.
  CONCATENATE lv_year_export lv_month_export lv_day_export INTO ev_date.

**农历描述
  DATA:lv_count TYPE i.
  DATA:lv_dd_string TYPE char100 VALUE '初一初二初三初四初五初六初七初八初九初十十一十二十三十四十五十六十七十八十九二十廿一廿二廿三廿四廿五廿六廿七廿八廿九三十'.
  DATA:lv_mm_string TYPE char20 VALUE '正二三四五六七八九十冬腊'.

  lv_count lv_day_add 2.
  lv_date_export+6(2lv_dd_string+lv_count(2).
  lv_count lv_month_add 1.
  CONCATENATE  lv_mm_string+lv_count(1'月' INTO lv_date_export+4(2).
  ev_date_text lv_date_export.

**天干地支
  DATA:lv_tg_string TYPE char10 VALUE '甲乙丙丁戊己庚辛壬癸'.
  DATA:lv_dz_string TYPE char12 VALUE '子丑寅卯辰巳午未申酉戌亥'.
  DATA:lv_sx_string TYPE char12 VALUE '鼠牛虎兔龙蛇马羊猴鸡狗猪'.
  DATA:lv_year_text TYPE char20.
  DATA:lv_mod TYPE i.

  lv_mod lv_year_export MOD 10 ).

  lv_year_text lv_tg_string+lv_mod(1).

  lv_mod lv_year_export MOD 12 ).

  CONCATENATE lv_year_text lv_dz_string+lv_mod(1'年' INTO lv_year_text.

  CONCATENATE lv_year_text ev_date_text INTO ev_date_text.

  CONCATENATE '属相:' lv_sx_string+lv_mod(1INTO ev_animal_sign
ENDFUNCTION.
阅读(1407) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~