得到两个日期、时间的间隔文本描述(精确到分钟) ---如两个日期+时间相隔【1天17小时10分钟】

FUNCTION ZGET_DATE_DIFF.

  *"----------------------------------------------------------------------

  *"*"Local Interface:

  *" IMPORTING

  *"    REFERENCE(DATE1) TYPE  D

  *"    REFERENCE(TIME1) TYPE  T

  *"    REFERENCE(DATE2) TYPE  D

  *"    REFERENCE(TIME2) TYPE  T

  *" EXPORTING

  *"    REFERENCE(TIMELIST) TYPE  TXT40

  *"    REFERENCE(ARRBEG) TYPE  TXT20

  *"    REFERENCE(ARREND) TYPE  TXT20

  *" EXCEPTIONS

  *"     INVALID_DATETIME

 *"----------------------------------------------------------------------

 

 DATA: T_DATEDIFF  TYPE  P,

       T_TIMEDIFF  TYPE  P,

       T_EARLIEST  TYPE  C,

       T_E_TDIFF LIKE  TVRO-FAHZTD,

       T_E_DATE2_EARLY LIKE  RV56A-SELKZ.

 DATA: T_CHAR1 LIKE RV56A-VHART,  "天

       T_CHAR2 LIKE RV56A-TRSTACT, "小时

       T_CHAR3 LIKE RV56A-TRG_AMPEL. "分钟

 DATA: T_CHAR4 LIKE TVRO-TDLNR, " 临时存放日期

       T_CHAR5 LIKE TVRO-TDLNR.  " 临时存放时间

 

  IFDATE1 IS  INITIAL OR TIME1 IS INITIAL ORDATE2 IS INITIAL AND TIME2 IS  INITIAL.

    MESSAGE '数据中日期时间存在为空的问题,请更正数据!' TYPE'I'.

   "RETURN.

 ENDIF.

 

 CALL FUNCTION 'SD_DATETIME_DIFFERENCE'

   EXPORTING

     DATE1                  = DATE1

     TIME1                  = TIME1

     DATE2                  = DATE2

     TIME2                  = TIME2

  IMPORTING

    DATEDIFF               =T_DATEDIFF     " 3 天

    TIMEDIFF               =T_TIMEDIFF       " 10 小时

    EARLIEST               =T_EARLIEST     " 1(DATE2>=DATE1) $ 2(DATE2<DATE1)

  EXCEPTIONS

    INVALID_DATETIME       = 1

    OTHERS                 = 2

           .

  IFSY-SUBRC <> 0.

*  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

*          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

 ENDIF.

 

 CALL FUNCTION 'SD_CALC_DURATION_FROM_DATETIME'

   EXPORTING

     I_DATE1                = DATE1

     I_TIME1                = TIME1

     I_DATE2                = DATE2

     I_TIME2                = TIME2

  IMPORTING

    E_TDIFF                =T_E_TDIFF                              " 13:40  13 小时 40 分钟

    E_DATE2_EARLY          =T_E_DATE2_EARLY     " X 或 空

  EXCEPTIONS

    INVALID_DATETIME       = 1

    OTHERS                 = 2

           .

  IFSY-SUBRC <> 0.

* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBERSY-MSGNO

*        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

 ENDIF.

 

 T_CHAR1 = T_DATEDIFF.

 T_CHAR2 = T_TIMEDIFF.

 T_CHAR3 = T_E_TDIFF.

 T_CHAR3 = T_CHAR3+2(2).

 

 " 如果分钟超出 30 分,则要将小时数减去 1,因为前边的 FM 计算如果超出 30 分,将小时数加 1.

  IFT_CHAR3 > 30.

     T_CHAR2 = T_CHAR2 - 1.

 ENDIF.

 

  IFT_CHAR1 > 0.

   CONCATENATE T_CHAR1 '天' T_CHAR2 '小时' T_CHAR3 '分钟'  INTO TIMELIST.

 ELSE.

   IF T_CHAR2 > 0 .

    CONCATENATE  T_CHAR2 '小时' T_CHAR3 '分钟'  INTO TIMELIST.

   ELSE.

      IF T_CHAR3 IS INITIAL. " 如果分钟为 0 ,也就是时间用了几秒的话,则将时间设置为 1 分钟

            T_CHAR3 = '1'.

      ENDIF.

      CONCATENATE  T_CHAR3 '分钟'  INTO TIMELIST.

   ENDIF.

 ENDIF.

  IF DATE1 IS NOT INITIAL AND TIME1 IS NOT INITIAL AND DATE2 IS NOT INITIAL ANDTIME2 IS NOT INITIAL.

     T_CHAR4 = DATE1.

     T_CHAR5 = TIME1.

     CONCATENATE T_CHAR4+0(4) '-' T_CHAR4+4(2) '-' T_CHAR4+6(2) ' '  T_CHAR5+0(2) ':' T_CHAR5+2(2) ':'T_CHAR5+4(2)  INTO ARRBEG RESPECTINGBLANKS.

     T_CHAR4 = DATE2.

     T_CHAR5 = TIME2.

     CONCATENATE T_CHAR4+0(4) '-' T_CHAR4+4(2) '-' T_CHAR4+6(2) ' '  T_CHAR5+0(2) ':' T_CHAR5+2(2) ':'T_CHAR5+4(2)  INTO ARREND RESPECTINGBLANKS.

 ENDIF.

 

ENDFUNCTION.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值