如何取某日的周几,月周,年周(转换例程)

周几

 DATAdiw_first TYPE VALUE '19790101'.
  RESULT SOURCE_FIELDS-/BIC/ZBUSDE diw_first MOD 1.


月周

=====

FM 

ZGET_WEEK_INFO_BASED_ON_DATE

参考 ECC中的

GET_WEEK_INFO_BASED_ON_DATE

因为BW中没有这个FM

=====

FM:

import: date

export: ZWEEK_MON  type /BIC/OIZWEEK_MON( numc 2)

ZWEEK_YEAR type  /BIC/OIZWEEK_YER   (numc 2)





FUNCTION ZGET_MONTH_WEEK.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(DATE) TYPE  SY-DATUM DEFAULT SY-DATUM
*"  EXPORTING
*"     REFERENCE(ZWEEK_MON) TYPE  /BIC/OIZWEEK_MON
*"     REFERENCE(ZWEEK_YEAR) TYPE  /BIC/OIZWEEK_YER
*"----------------------------------------------------------------------
DATA:
  ZFLAG TYPE /BIC/OIZFLAG,
  p_date1 type sy-datum,
  p_date2 type sy-datum,
  p_date3 type sy-datum,
  P_DATE5 TYPE SY-DATUM,
  P_DATE6 TYPE SY-DATUM,
  P_DATE7 TYPE SY-DATUM,
  P_DATE8 TYPE SY-DATUM,
  L_DATE TYPE SY-DATUM,
  L_DATE1 TYPE SY-DATUM,
  current_week type scal-week,
  current_week1 type scal-week,
  previous_week type scal-week.

  p_date3 DATE.
  CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date =  p_date3
  IMPORTING
  week current_week
  monday p_date1
  sunday p_date2.
ZWEEK_YEAR current_week+4(2).
* 输入日期的年周,周一与周日。

"判断1日是否跨月
* CONCATENATE p_date3+0(6) '01' INTO L_DATE1.
*  CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
*  EXPORTING
*  date = L_DATE1
*  IMPORTING
*  week = CURRENT_WEEK1
*  monday = p_date7
*  sunday = p_date8.
*  IF P_DATE7+4(2) <> P_DATE3+4(2). "1日跨月
*    ZFLAG = 'X'.
*  ELSE.
*    ZFLAG = 'Y'.
*  ENDIF.

  If p_date1+4(2<> p_date2+4(2)."如果跨月
    IF DATE+4(2P_DATE2+4(2)"如果输入日期与星期日同月(某月最前几天)
  ZWEEK_MON 1.
     ELSEIF P_DATE3+4(2P_DATE1+4(2)."如果输入日期与星期一同月(某月最后几天)
       p_date3 p_date3 7.
       CALL FUNCTION 'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date =  p_date3
  IMPORTING
  week current_week1
  monday p_date5
  sunday p_date6."取出上周的周一和周日
 L_date p_date3.
       WHILE p_date6+4(2L_DATE+4(2).

       CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date p_date3
  IMPORTING
  week previous_week
  monday p_date5
  sunday p_date6.
  P_DATE3 P_DATE3 7.
  ENDWHILE.
IF CURRENT_WEEK+0(4> PREVIOUS_WEEK+0(4)"如果跨年
    CONCATENATE CURRENT_WEEK+0(4'01' INTO PREVIOUS_WEEK.
    ZWEEK_MON CURRENT_WEEK PREVIOUS_WEEK + 1.
  ELSE.
  ZWEEK_MON current_week previous_week.
  ENDIF.
 ENDIF.


  ELSE."如果不跨月
    L_DATE P_DATE3.
  WHILE p_date2+4(2L_DATE+4(2)"只要周日月份等于输入日月份
  p_date3 p_date3 7.
  CALL FUNCTION  'ZGET_WEEK_INFO_BASED_ON_DATE'
  EXPORTING
  date p_date3
  IMPORTING
  week previous_week
  monday p_date1
  sunday p_date2.
  ENDWHILE.
  IF CURRENT_WEEK+0(4> PREVIOUS_WEEK+0(4)"如果跨年
    CONCATENATE CURRENT_WEEK+0(4'01' INTO PREVIOUS_WEEK.
    ZWEEK_MON CURRENT_WEEK PREVIOUS_WEEK + 2.
  ELSE.
  ZWEEK_MON current_week previous_week."不跨年,不跨月
  ENDIF.
  ENDIF.







ENDFUNCTION.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值