SAP 使用较频繁的日期时间处理函数总结

来源:互联网 发布:java开发技术大全 pdf 编辑:程序博客网 时间:2024/05/23 16:45

 

         在ABAP实际开发中,经常需要用到一些日期时间处理函数,个人感觉经常使用到的函数进行一下汇总

1.  根据工厂日历 计划交货日期收货处理时间 来计算 销售计划中计划完工日期,其他类似日期计算等

     CALL FUNCTION 'BKK_ADD_WORKINGDAY'
        EXPORTING
          I_DATE      = 输入日期
          I_DAYS      = 相差天数                   "可以为正负值(正值为向后推算日期,负值反之)
          I_CALENDAR1 'CN'                  "工厂日历标识(中国区)
        IMPORTING
          E_DATE      返回日期.

 

2、获得最后一天
CALL FUNCTION 'FIMA_DATE_CREATE'
  EXPORTING
   I_DATE                       = I_DATE "输入日期。sy-datum类型 如:‘20110402’。
   I_FLG_END_OF_MONTH            = ' '
   I_YEARS                       = 2 "两年后的日期时间,既sy-datum的年加2所得日期,可为负数,表示前两年
   I_MONTHS                      = 1 "一个月后的日期。既sy-datum的月加1所得日期,可为负数,表示前一个月
   I_DAYS                        = 23 "23天后的日期。可为负数,表示23天前的日期
   I_CALENDAR_DAYS               = 10 "10天后的日历。同I_DAYS参数。
   I_SET_LAST_DAY_OF_MONTH       = 'X' "返回的日期为当前月份的最后一天
 IMPORTING
   E_DATE                        = E_DATE "返回的日期。如果I_DAYS和I_CALENDAR_DAYS都设置,则天数累加
   E_FLG_END_OF_MONTH            = FLAG     "如果输入参数I_SET_LAST_DAY_OF_MONTH设置'X'了,则返回值为'X'。
   E_DAYS_OF_I_DATE              = DAY. "返回输入日期的‘日’字段与I_DAYS字段的和。本例子为:25

 

3.获得周数
DATA WEEK LIKE SCAL-WEEK.
CALL FUNCTION 'DATE_GET_WEEK'
  EXPORTING
    DATE               = SY-DATUM ”输入日期,如:‘20110402’
 IMPORTING
   WEEK               = WEEK.“返回输入日期为该年第几周。如:‘201113’。表示为2011年的第13周。

 

4.获得某周的第一天日期
DATA DATE LIKE SCAL-DATE.
CALL FUNCTION 'WEEK_GET_FIRST_DAY'
  EXPORTING
    WEEK               = '201113' "表示2011年的第13周
 IMPORTING
   DATE               = DATE. "返回的DATE值为20110328,既2011年第13周的第一天是3月28日。
 
5、得到输入日期N个月前/后的日期
5.1 返回指定月以前的日期
CALL FUNCTION 'CCM_GO_BACK_MONTHS'
  EXPORTING
    CURRDATE         = sy-datum
    BACKMONTHS       = 6
 IMPORTING
   NEWDATE          = DATE .
5.2 返回指定年,月,日以前或以后的日期.年月日得加减
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  EXPORTING
    DATE            = sy-datum
    DAYS            = 10
    MONTHS          = 5
   SIGNUM          = '+'"取值为‘+’或‘-’
    YEARS           = 1
 IMPORTING
   CALC_DATE       = date  .

6、返回两个日期之间的年数、月数、天数
CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
  EXPORTING
    I_DATE_FROM          = '20110402'
*   I_KEY_DAY_FROM       =
    I_DATE_TO            = '20110522'
*   I_KEY_DAY_TO         =
*   I_FLG_SEPARATE       = ' '
 IMPORTING
   E_DAYS               = E_DAYS    "值为50
   E_MONTHS             = E_MONTHS "值为2
   E_YEARS              = E_YEARS .  "值为1
 
7、获取输入日期月份的最后一天
BKK_GET_MONTH_LASTDAY
 EXPORTING
  I_DATE = '20110403'
 IMPORTING
  E_DATE = E_DATE. "E_DATE= '20110430'

8、日期有效性检查
 DATE_CHECK_PLAUSIBILITY

9、获得所有的月份信息
DATA MONTH_NAMES LIKE T247 OCCURS 0.
CALL FUNCTION 'MONTH_NAMES_GET'
 EXPORTING
   LANGUAGE                    = SY-LANGU
* IMPORTING
*   RETURN_CODE                 =
  TABLES
    MONTH_NAMES                 = MONTH_NAMES
* EXCEPTIONS
*   MONTH_NAMES_NOT_FOUND       = 1
*   OTHERS                      = 2
          .
10.弹出一个窗口显示一个日历允许用户选择一个日期
CALL FUNCTION 'F4_DATE'
 EXPORTING
   DATE_FOR_FIRST_MONTH               = SY-DATUM
   DISPLAY                            = 'X' "如果为X则只显示日历窗口,而没有返回值
*   FACTORY_CALENDAR_ID                = ' '
*   GREGORIAN_CALENDAR_FLAG            = ' '
*   HOLIDAY_CALENDAR_ID                = ' '
*   PROGNAME_FOR_FIRST_MONTH           = ' '
 IMPORTING
   SELECT_DATE                        =  “返回值为选择的日期
*   SELECT_WEEK                        =
*   SELECT_WEEK_BEGIN                  =
*   SELECT_WEEK_END                    =
* EXCEPTIONS
*   CALENDAR_BUFFER_NOT_LOADABLE       = 1
*   DATE_AFTER_RANGE                   = 2
*   DATE_BEFORE_RANGE                  = 3
*   DATE_INVALID                       = 4
*   FACTORY_CALENDAR_NOT_FOUND         = 5
*   HOLIDAY_CALENDAR_NOT_FOUND         = 6
*   PARAMETER_CONFLICT                 = 7
*   OTHERS                             = 8  
 
11、获取一年的第几周和这个周一和周日的日期
FM:GET_WEEK_INFO_BASED_ON_DATE
输入参数                        值
DATE                            2008.01.09
输出参数                        值
WEEK                            200802      <----2008年第二周
MONDAY                          2008.01.07 <----这个周周一的日期
SUNDAY                          2008.01.13 <----周日的日期
 
12、输入日期是星期几
FM:DAY_IN_WEEK
输入参数                        值
DATUM                           2008.01.09
输出参数                        值
WOTNR                           3           <----2008-1-9为周三
13、弹窗选择时间
CALL 'F4_CLOCK'
 EXPORTING
  START_TIME = '15:18:20'或‘151820’"输入时可选的
  DISPLAY    =
 IMPORTING
  SELECTED_TIME = “返回选择的时间

14、 年和月的选择窗口
DATA MONTH LIKE ISELLIST-MONTH.
CALL FUNCTION 'POPUP_TO_SELECT_MONTH'
  EXPORTING
    ACTUAL_MONTH                     = SY-DATUM+0(6)
*   FACTORY_CALENDAR                 = ' '
*   HOLIDAY_CALENDAR                 = ' '
   LANGUAGE                         = SY-LANGU
   START_COLUMN                     = 8
   START_ROW                        = 5
 IMPORTING
   SELECTED_MONTH                   = MONTH "返回值为六位数字
*   RETURN_CODE                      =
 EXCEPTIONS
   FACTORY_CALENDAR_NOT_FOUND       = 1
   HOLIDAY_CALENDAR_NOT_FOUND       = 2
   MONTH_NOT_FOUND                  = 3
   OTHERS                           = 4  .
 
15、获取周的信息
DATA WEEKDAY LIKE T246 OCCURS 0.
CALL FUNCTION 'WEEKDAY_GET'
* EXPORTING
*   LANGUAGE                = SY-LANGU
* IMPORTING
*   RETURN_CODE             =
  TABLES
    WEEKDAY                 = WEEKDAY
* EXCEPTIONS
*   WEEKDAY_NOT_FOUND       = 1
*   OTHERS                  = 2 

 

 ******************************************************************************************************************************************

如下转载自:http://www.cnblogs.com/qlp1982/archive/2013/12/17/3477801.html

 ******************************************************************************************************************************************

一 财务期间处理 T_CODE: OB29

 **取 公司年度变式, 和 货币
  SELECT SINGLE waers periv FROM t001
        INTO (v_waers,v_periv)
        WHERE bukrs = 'HL01'.

**取当前日期所在的财务期间年月
  CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
    EXPORTING
      i_date  = sy-datum
      i_periv = v_periv
    IMPORTING
      e_buper = p_emonth
      e_gjahr = p_gjahr.

** 根据会计期间得到月初日期

  CALL FUNCTION 'FIRST_DAY_IN_PERIOD_GET'
    EXPORTING
      i_gjahr              = p_gjahr
       i_periv              = v_periv
      i_poper              = p_emonth
   IMPORTING
     e_date               = v_fr_date
   EXCEPTIONS
     input_false          = 1
     t009_notfound        = 2
     t009b_notfound       = 3
     OTHERS               = 4
            .

 ***根据会计期间得到月末日期

  CALL FUNCTION 'LAST_DAY_IN_PERIOD_GET'                 "取本月最后一天
    EXPORTING
      i_gjahr = p_gjahr                                     "会计年度
      i_periv = v_periv                                     "会计年度变式K4
      i_poper = p_emonth                                    "期间(3位N)''
    IMPORTING
      e_date  = v_to_date.

二 工厂日历处理

    DATA:dat LIKE sy-datum.

**jhzqmax 是最大间隔日期

  dat = sy-datum .

 WHILE i <= jhzqmax.
        i = i + 1 .
        dat =   dat  +  1.
*--------------工厂日历的日期---------------------
        CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
          EXPORTING
            date                = dat
            factory_calendar_id = 'CN'
          IMPORTING
            date                = dat.
      ENDWHILE.
**dat 的结果是推算出 当前日日期dat隔jhzqmax个工作日后的日期。

三 普通日期处理

 日期 加减 
          

          CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'

              EXPORTING

                DATE            = in_date

                DAYS            = 5

                MONTHS          = 0

                SIGNUM          = '+'

                YEARS           = 0

              IMPORTING

                CALC_DATE       = out_date

四 ,日期函数汇总

SCA1                           日期:转换
这个函数组里主要是一些转换例程,平时大概用到的机会不多。
BUFFER_CONTROL_SCA1
CONVERSION_EXIT_IDATE_INPUT    External date INPUT conversion exit (e.g. 01JAN1994)
CONVERSION_EXIT_IDATE_OUTPUT   External date OUTPUT conversion exit (e.g. 01JAN1994)
CONVERSION_EXIT_LDATE_OUTPUT   Internal date OUTPUT conversion exit (e.g. YYYYMMDD)
CONVERSION_EXIT_SDATE_INPUT    External date (e.g. 01.JAN.1994) INPUT conversion exit
CONVERSION_EXIT_SDATE_OUTPUT   Internal date OUTPUT conversion exit (e.g. YYYYMMDD)
CONVERT_DATE_TO_EXTERNAL       Conversion: Internal to external date (like screen conversion)
CONVERT_DATE_TO_INTERNAL       Conversion: External to internal date (like screen conversion)
CONV_EXIT_LDATE_OUTPUT_LANGU   Internal date OUTPUT conversion exit (e.g. YYYYMMDD)

SCA2                           日历:附加功能
CALENDAR_VISUAL_INFORMATION
CALENDAR_VISUAL_INFORMATION_2
CALENDAR_VISUAL_NEW_SELECTION
CALENDAR_VISUAL_PRESENTATION   visual calendar display (like calendar page)(这个函数可以显示一个带有工具栏的 LIST 形式的日历,当作弹出窗口应该不错。)
CALENDAR_VISUAL_PRESENTATION_2

SCA3                           日历:弹出
POPUP_TO_SELECT_MONTH          Popup to choose a month(弹出一个选择年度和月份的对话框,返回选择的年月,选择范围为指定年度的前后50年)

SCA4                           日历:时间(日期/时间)
DURATION_DETERMINE             Calendar: Determine duration between two times
END_TIME_DETERMINE             Calendar: Determine end date and time
START_TIME_DETERMINE           Calendar: Determine start date and time

SCA5                           Calendar: Additional functions
这个函数组中的函数作用应该比较丰富
DAY_ATTRIBUTES_GET(获得日期的属性)
DAY_NAMES_GET(获得一周内每天的特定语言的名称)
FACTORY_CALENDAR_ATTRIBUTE_GET Calendar: Get Factory Calendar Attributes (Table TFACD)
FACTORY_CALENDAR_GET(获得所有工厂日历)
HOLIDAY_CALENDAR_GET(获得所有假期日历)
HOLIDAY_GET(查询某个指定工厂日历、假期日历下,两个日期间的所有假日。)
MONTH_NAMES_GET(获得每个月的特定语言的名称)

SCA6                           Periodic appointments
PERIOD_DIALOG(显示一个期间选择的对话框,其中第一个参数,处理模式有下列可能值:‘I’,插入;‘D’,删除;‘U’,更新指定日期;‘A’,更新全部日期;‘S’,显示。)
PERIOD_DISPLAY_DATES           Display Appointments of a Periodic Appointment
WEEKDAY_GET                    Calendar: Get day of the week
WEEKNR_GET                     Calendar: Fetch Week Number

SCAC                           Calendar: Controls
F4_DATE_CONTROL                Display factory calendar or Gregor. calendar and choose a day(这就是我们经常看到的标准 F4 日期选择的弹出窗口。)

SCAL                           日历功能
DATE_COMPUTE_DAY               根据日期返回的星期值
DATE_COMPUTE_DAY_ENHANCED
DATE_CONVERT_TO_FACTORYDATE    根据日期返回工厂日历日期
DATE_GET_WEEK                  返回某日期所在的礼拜
EASTER_GET_DATE                返回一个年度的复活节日期(复活节,复活节星期日)
FACTORYDATE_CONVERT_TO_DATE    根据一个工厂日历日期返回的日期
HOLIDAY_CHECK_AND_GET_INFO     检查日期是否是公共假日并在需要时提供信息
LAST_FACTORYDATE_GET           Calendar function: Return last factory date for a factory calendar
WEEK_GET_FIRST_DAY             返回一周的第一天