SAP ABAP 日期,時間 相關函數

獲的兩個日期之間的分鐘數函數

data min TYPE i.

CALL FUNCTION 'DELTA_TIME_DAY_HOUR'
  EXPORTING
    T1            = '060000'
    T2            = '070000'
    D1            = '20160101'
    D2            = '20160101'
 IMPORTING
   MINUTES        = min          .

write min.

 獲取兩個日期期間的:天數、週數、月數、年數spa

包括期間月份的開始(月份第一天日期)、截止日期(月份最後一天日期)code

TYPE-POOLS: p99sg.
DATA: days   TYPE i,
      weeks  TYPE i,
      months TYPE i,
      years  TYPE i.
 
DATA: month_tab TYPE STANDARD TABLE OF p99sg_month_tab_row.
 
CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'
  EXPORTING
    begda     = '20150101'    "開始日期
    endda     = '20160101'    "截止日期
  IMPORTING
    days      = days          "返回天數:266
    c_weeks   = weeks         "返回週數:52
    c_months  = months        "返回月數:12
    c_years   = years         "返回年數:1
    month_tab = month_tab.    "期間月份首尾日
 

過函數計算兩個日期的差別月份orm

      CALL FUNCTION 'MONTHS_BETWEEN_TWO_DATES_NEW'
        EXPORTING
          I_DATUM_BIS             = 
          I_DATUM_VON             = 
*       I_KZ_INCL_BIS           = ' '
*       I_KZ_VOLLE_MONATE       = 'X'
       IMPORTING
         E_MONATE                = 

獲取輸入日期月份的最後一天的日期blog

CALL FUNCTION 'LAST_DAY_OF_MONTHS' EXPORTING day_in = '20160104' "輸入日期 IMPORTING last_day_of_month = "返回最後一天日期:20160131 EXCEPTIONS day_in_no_date = 1 OTHERS = 2.

 

CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
  EXPORTING
    day_in            = '20160101'    
  IMPORTING
    last_day_of_month = date           20160131
  EXCEPTIONS
    day_in_no_date    = 1
    OTHERS            = 2.

 

CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'
  EXPORTING
    i_date = '20160101'   "輸入日期
  IMPORTING
    e_date = date. 20160131

根據條件獲取須要的日期 ci

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  EXPORTING
    date      = '20160101'    "日期
    days      = 10            "天數
    months    = 0             "月數
    signum    = '+'           
    years     = 0             "年數
  IMPORTING
    calc_date = calc_date.    (2016.01.11
CALL FUNCTION 'FIMA_DATE_CREATE'
  EXPORTING
    I_DATE                        = '20160101'
   I_FLG_END_OF_MONTH            = ''
   I_YEARS                       = 1
*   I_MONTHS                      = 0
   I_DAYS                        = 1
*   I_CALENDAR_DAYS               = 2
  " I_SET_LAST_DAY_OF_MONTH       = 'X'
 IMPORTING
   E_DATE                        = w_date
   E_FLG_END_OF_MONTH            = w_flag
*   E_DAYS_OF_I_DATE              = w_days
          .
write:  w_date,
      / w_flag,
      / w_days.

 

DATA date TYPE sy-datum.
 
CALL FUNCTION 'MONTH_PLUS_DETERMINE'
  EXPORTING
    months  = 3
    olddate = '20140101'   "輸入日期
  IMPORTING
    newdate = date.        "返回日期:20140401

 

DATA date TYPE sy-datum.
 
CALL FUNCTION 'CCM_GO_BACK_MONTHS'
  EXPORTING
    currdate   = '20140101'   "輸入日期
    backmonths = 3            "過去月數
  IMPORTING
    newdate    = date.        "返回日期:20131001

 

判斷是否爲假日input

CALL FUNCTION 'HOLIDAY_CHECK_AND_GET_INFO'
  EXPORTING
    date = '20160101"輸入日期:春節
    holiday_calendar_id          = ''        "假日日曆 ID
    with_holiday_attributes      = ' '         "屬性標識
  IMPORTING
    holiday_found                = www     "輸出是否爲假日的標記  輸出結果:X
  TABLES
    holiday_attributes           = attributes  "輸出該假日的屬性
                                               "若WITH_HOLIDAY_ATTRIBUTES參數 = X,則會帶出屬性記錄
  EXCEPTIONS
    calendar_buffer_not_loadable = 1
    date_after_range             = 2
    date_before_range            = 3
    date_invalid                 = 4
    holiday_calendar_id_missing  = 5
    holiday_calendar_not_found   = 6
    OTHERS                       = 7.

          CALL FUNCTION 'HOLIDAY_CHECK_AND_GET_INFO'
            EXPORTING
              date                = <lfs_tab>-datum
              holiday_calendar_id 'CN'
            IMPORTING
              holiday_found       = v_cind.

          IF v_cind ''.
            CALL FUNCTION 'DAY_IN_WEEK'
              EXPORTING
                datum = <lfs_tab>-datum
              IMPORTING
                wotnr = v_wotnr.
            CASE v_wotnr.
              WHEN OR 7.
                v_cind 'X'.
            ENDCASE.
          ENDIF.

轉換日期爲內部數字格式it

CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
  EXPORTING
    date_external            = '2016.01.01' "當前用戶日期格式:YYYY.MM.DD
    accept_initial_date      = ' '
  IMPORTING
    date_internal            = date         "輸出20160101
  EXCEPTIONS
    date_external_is_invalid = 1
    OTHERS                   = 2.

轉換日期爲系統日期格式ast

CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
  EXPORTING
    date_internal            = '20160101'  
  IMPORTING
    date_external            =                        2016.01.01
  EXCEPTIONS
    date_internal_is_invalid = 1
    OTHERS                   = 2.

查看日期屬性form

DATA: year_of_valid_from TYPE scal-year,
      year_of_valid_to   TYPE scal-year,
      return_code        TYPE sy-subrc.
 
DATA day_attributes TYPE STANDARD TABLE OF casdayattr.
 
CALL FUNCTION 'DAY_ATTRIBUTES_GET'
  EXPORTING
    factory_calendar           = ' '              "工廠日曆ID
    holiday_calendar           = ' '              "假期日曆ID
    date_from                  = '20140101'       "開始日期
    date_to                    = '20140110'       "截止日期
    language                   = sy-langu         "系統當前語言
    non_iso                    = ' '
  IMPORTING
    year_of_valid_from         = year_of_valid_from
    year_of_valid_to           = year_of_valid_to
    returncode                 = return_code
  TABLES
    day_attributes             = day_attributes "返回日期每日屬性
  EXCEPTIONS
    factory_calendar_not_found = 1
    holiday_calendar_not_found = 2
    date_has_invalid_format    = 3
    date_inconsistency         = 4
    OTHERS                     = 5.
 

*獲取當前日期是星期幾

DATA wotnr TYPE p.
 
CALL FUNCTION 'DAY_IN_WEEK'
  EXPORTING
    datum = '20140101'  "輸入日期
  IMPORTING
    wotnr = wotnr.      "返回:3 =》星期三/週三

*獲取當前日期週週一週日的日期

  CALL FUNCTION 'GET_WEEK_INFO_BASED_ON_DATE'
    EXPORTING
      date   = sy-datum   "'20140101'
    IMPORTING
      week   = week       "返回週數:201401
      monday = monday     "返回週一日期:2013.12.30
      sunday = sunday.    "返回週日日期:2014.01.05

 

DATA date TYPE sy-datum.
 
CALL FUNCTION 'WEEK_GET_FIRST_DAY'
  EXPORTING
    week         = '201401'   "輸入周
  IMPORTING
    date         = date       "返回該周第一天(週一):2013.12.30
  EXCEPTIONS
    week_invalid = 1
    OTHERS       = 2.

 

F4_DATE 函數

 

PARAMETERS:p1(6) TYPE c. 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p1. 
  DATA:l_date TYPE sy-datum. 
  CALL FUNCTION 'F4_DATE'
    EXPORTING
      date_for_first_month         = sy-datum
    IMPORTING
      select_date                  = l_date     "用戶選擇後返回的日期
    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.

F4_CLOCK 函數

PARAMETERS:p1(6) TYPE c.
 
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p1.
 
  DATA: l_time TYPE sy-uzeit.
 
  CALL FUNCTION 'F4_CLOCK'
    EXPORTING
      start_time    = sy-uzeit
      display       = ' '
    IMPORTING
      selected_time = l_time.

F4 彈出框的形式選擇年月

PARAMETERS: p_year   TYPE mard-lfgja DEFAULT sy-datum+0(4),
            p_month  TYPE mard-lfmon.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_month.

  DATA: actual_month   LIKE isellist-month,
        selected_month LIKE isellist-month,
        return_code    TYPE sy-subrc.

  CONCATENATE p_year sy-datum+4(2) INTO actual_month.

  CALL FUNCTION 'POPUP_TO_SELECT_MONTH'
    EXPORTING
      actual_month               = actual_month   "傳入年份
      factory_calendar           = ' '            "工廠日曆 ID
      holiday_calendar           = ' '            "假日日曆 ID
      language                   = sy-langu       "當前系統語言
      start_column               = 8              "彈出框屏幕位置
      start_row                  = 5              "彈出框屏幕位置
    IMPORTING
      selected_month             = selected_month "返回用戶輸入月份
      return_code                = return_code    "返回 sy-subrc
    EXCEPTIONS
      factory_calendar_not_found = 1
      holiday_calendar_not_found = 2
      month_not_found            = 3
      OTHERS                     = 4.

  IF return_code = 0.

    p_year  = selected_month+0(4).
    p_month = selected_month+4(2).

  ENDIF.

彈出選擇周的對話框

DATA: begin_date TYPE sy-datum,
      end_date   TYPE sy-datum.
 
CALL FUNCTION 'POPUP_CALENDAR_SDB'
  EXPORTING
    sel_day      = 'X'        "啓用天 選擇
    sel_week     = 'X'        "啓用周 選擇
    sel_month    = 'X'        "啓用月 選擇
    sel_interval = 'X'
    focus_day    = sy-datum   "默認選擇日期
  IMPORTING
    begin_date   = begin_date "返回選擇周第一天
    end_date     = end_date.  "返回選擇周最後一天

12小時制與24小時制的時間轉換  

DATA: lv_in_time  TYPE tims,
      lv_out_time TYPE tims,
      lv_am_pm    TYPE c.
lv_in_time = '080000'.
CALL FUNCTION 'HRVE_CONVERT_TIME'
  EXPORTING
    type_time       = 'B'    " A = 24小時制 -> 12小時制  B = 12小時制 -> 24小時制
    input_time      = lv_in_time
    input_am_pm     = 'PM'
  IMPORTING
    output_time     = lv_out_time
    output_am_pm    = lv_am_pm
  EXCEPTIONS
    parameter_error = 1
    OTHERS          = 2.
 
WRITE:/ lv_in_time . 
WRITE:/ lv_out_time. 

08:00:00
20:00:00

工做計劃

HR_ABS_ATT_TIMES_AT_ENTRY

HR_PERSON_READ_WORK_SCHEDULE

日期格式轉換

 

CALL FUNCTION 'FORMAT_DATE_4_OUTPUT'
  EXPORTING
    DATIN         = 
    FORMAT        =
* IMPORTING
*   DATEX         =
          .

 

DATA date2(10) TYPE c.
 
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
  EXPORTING
    date_internal            = '20140101'  
  IMPORTING
    date_external            = date2     "根據用戶日期格式參數輸出:YYYY.MM.DD
  EXCEPTIONS
    date_internal_is_invalid = 1
    OTHERS                   = 2.

 

時間戳

長度 15的 DEC類型,組成爲  8位日期 + 6位時間。

 把時間和日期轉成時間戳

CALL FUNCTION 'CIF_GEN4_CONVERT_DATETIME'
   EXPORTING
     iv_date                      = l_datum1
     IV_TIME                      = l_time1
     IV_TIMEZONE                  = SY-ZONLO
   IMPORTING
     EV_TIMESTAMP                 = l_timestamp1
  EXCEPTIONS
    TIME_CONVERSION_FAILED       = 1
    OTHERS                       = 2
           . 
CALL FUNCTION 'IB_CONVERT_INTO_TIMESTAMP'
  EXPORTING
    I_DATLO           =
    I_TIMLO           =
*   I_TZONE           = SY-ZONLO
* IMPORTING
*   E_TIMESTAMP       =
          .

 

REPORT  z_barry_test.
 
TABLES: t001w,adrc .
DATA: date LIKE sy-datum,
      time LIKE sy-uzeit,
      tstamp LIKE tzonref-tstamps.
 
SELECT SINGLE * FROM t001w WHERE werks = '0001'.
IF sy-subrc = 0.
  SELECT SINGLE * FROM adrc WHERE addrnumber = t001w-adrnr . "time_zone
  PERFORM date_to_timestamp USING '20080808' '080808' adrc-time_zone
              CHANGING tstamp.
  WRITE tstamp.
ENDIF.
IF NOT tstamp IS INITIAL.
  PERFORM timestamp_to_date USING tstamp adrc-time_zone
              CHANGING date time.
  WRITE / : date,time .
ENDIF.
 
*&---------------------------------------------------------------------*
*&      Form  date_to_timestamp
*&---------------------------------------------------------------------*
*       日期+時間+時區  轉變爲 時間戳
*----------------------------------------------------------------------*
FORM date_to_timestamp USING i_date LIKE sy-datum
                             i_time LIKE sy-uzeit
                             i_tzone LIKE  tzonref-tzone
                        CHANGING o_tstamp LIKE tzonref-tstamps  .
  CONVERT DATE i_date TIME i_time INTO TIME STAMP o_tstamp TIME ZONE i_tzone.
  CASE sy-subrc.
    WHEN 8.
      MESSAGE e000(oo) WITH '時區錯'.
    WHEN 12.
      MESSAGE e000(oo) WITH '時間戳錯誤'.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    "date_to_timestamp
 
*&---------------------------------------------------------------------*
*&      Form  TIMESTAMP_TO_DATE
*&---------------------------------------------------------------------*
*       時間戳+時區 轉變爲 日期和時間
*----------------------------------------------------------------------*
FORM timestamp_to_date USING   i_tstamp LIKE tzonref-tstamps
                               i_tzone LIKE  tzonref-tzone
                       CHANGING o_date LIKE  sy-datum
                                o_time LIKE  sy-uzeit.
  DATA: w_tzone LIKE tzonref-tzone.
  w_tzone = i_tzone.
  CONVERT TIME STAMP i_tstamp TIME ZONE w_tzone INTO DATE o_date TIME o_time.
  CASE sy-subrc.
    WHEN 8.
      MESSAGE e000(oo) WITH '時區錯'.
    WHEN 12.
      MESSAGE e000(oo) WITH '時間戳錯誤'.
    WHEN OTHERS.
  ENDCASE.
ENDFORM.                    "TIMESTAMP_TO_DATE

 

把時間戳轉成時間和日期

CALL FUNCTION 'CIF_GEN4_CONVERT_TIMESTAMP'
   EXPORTING
     iv_timestamp                = l_timestamp3
    IV_TIMEZONE                  = SY-ZONLO
  IMPORTING
    EV_DATE                      = l_datum3
    EV_TIME                      = l_time3
  EXCEPTIONS
    TIME_CONVERSION_FAILED       = 1
    OTHERS                       = 2
           . 
相關文章
相關標籤/搜索