SAP ABAP基础语法-日期函数(九)

abap日期相关

日期的加减:

复制代码
 BKK_ADD_MONTH_TO_DATE

根据当前时间如何找到上月的第一天和最后一天?

sql 复制代码
CALL FUNCTION 'FIMA_DATE_CREATE'

        EXPORTING

             I_DATE                  = SY-DATUM

             I_MONTHS                = '-1'

             I_SET_LAST_DAY_OF_MONTH = 'X'

        IMPORTING

             E_DATE                  = LASTDATE.

LASTDATE是上个月最后一天。

FIRSTDAY是上月第一天

CONCATENATE LASTDATE+(6) '01' INTO FIRSTDAY.

当天是当年的第几周

sql 复制代码
DATE_GET_WEEK

得到该周第一天

sql 复制代码
WEEK_GET_FIRST_DAY

查找当前月份以前的月份(比如现在是4月份,如果我需要知道6个月之前是哪个月)

sql 复制代码
CCM_GO_BACK_MONTHS

RP_CALC_DATE_IN_INTERVAL

获取两日期之间天数函数

sql 复制代码
FIMA_DAYS_AND_MONTHS_AND_YEARS

取得当月的第一天和最后一天

sql 复制代码
CONCATENATE sy-datum(6) '01' INTO so_date-low.

CALL FUNCTION 'BKK_GET_MONTH_LASTDAY'

   EXPORTING

     i_date = sy-datum

   IMPORTING

     e_date = so_date-high.

so_date-sign = 'I'. so_date-option = 'BT'. APPEND so_date.

年月日加减

sql 复制代码
RP_CALC_DATE_IN_INTERVAL

日期有效性检查

sql 复制代码
DATE_CHECK_PLAUSIBILITY

两日期作差

sql 复制代码
SD_DATETIME_DIFFERENCE 

把输入日期转为工厂日历日期

sql 复制代码
DATE_CONVERT_TO_FACTORYDATE

获得所有的月和名字

sql 复制代码
MONTH_NAMES_GET

弹出一个窗口显示一个日历允许用户选择一个日期

sql 复制代码
F4_DATE

获得一个月的最后一天

sql 复制代码
RP_LAST_DAY_OF_MONTHS

获得期间首日

sql 复制代码
FIRST_DAY_IN_PERIOD_GET 

获得期间末日

sql 复制代码
LAST_DAY_IN_PERIOD_GET

返回一个日期所在的周数

sql 复制代码
DATE_GET_WEEK

获得两个日期的年数

sql 复制代码
CALL FUNCTION 'HR_99S_INTERVAL_BETWEEN_DATES'

          EXPORTING

            begda   = gdat

            endda   = sy-datum

          IMPORTING

            c_years = l_age.

关于星期(周)的函数

sql 复制代码
FM:
GET_WEEK_INFO_BASED_ON_DATE

输入参数                        值

DATE                            2008.01.09

输出参数                        值

WEEK                            200802     

MONDAY                          2008.01.07

SUNDAY                          2008.01.13

FM:
DAY_IN_WEEK(输入日期是星期几)

输入参数                        值

DATUM                           2008.01.09

输出参数                        值

WOTNR                           3         

*更多关于Week的函数请看Function Group:CADA

*弹出选择周的对话框

sql 复制代码
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_week-low.
PERFORM getweek CHANGING s_week-low.
FORM getweek CHANGING p_week .
DATA: begin_date TYPE d .
CALL FUNCTION 'POPUP_CALENDAR_SDB'
       EXPORTING
            sel_week   = 'X'
            focus_day = sy-datum
       IMPORTING
            begin_date = begin_date.
CALL FUNCTION 'GET_WEEK_INFO_BASED_ON_DATE'
       EXPORTING
            date = begin_date
       IMPORTING
            week = p_week.
ENDFORM.

选择时间

F4_CLOCK

*需求:只有显示年月,但要有日期的search help

sql 复制代码
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.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
   p1 = l_date+0(6).
* check plausibility of dates
CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
     EXPORTING
          DATE = bkdf-dbbdt.

判断是不是时间

sql 复制代码
TIME_CHECK_PLAUSIBILITY  

得到当前的财政年(fiscal year)

sql 复制代码
GET_CURRENT_YEAR

察看某日期的属性,包括该日期是星期几,第几天(周2=2),是不是公共假期等,需要输入国家日历

sql 复制代码
DAY_ATTRIBUTES_GET

判断某天是否是假日

sql 复制代码
HOLIDAY_CHECK_AND_GET_INFO

月份选择窗口

sql 复制代码
POPUP_TO_SELECT_MONTH

比较日期和时间

sql 复制代码
TYPE-POOLS : TRFF .
DATA : X_LOG_OP        TYPE TRFF_TYPE_C_2 .
          CALL FUNCTION 'FIMA_DATE_COMPARE'
          EXPORTING
            I_FLG_INTRADAY = 'X'
            I_DATE         = SY-DATUM
            I_TIME         = SY-UZEIT
            I_COMP_DATE    = L_MODIFY-MODDATE
            I_COMP_TIME    = L_MODIFY-MODTIME
          IMPORTING
            E_LOG_OP       = X_LOG_OP.

p_months = -4."前4月,如果为正,则是后面的日期

CALL FUNCTION 'MONTH_PLUS_DETERMINE'
    EXPORTING
      MONTHS        = p_months
      OLDDATE       = p_date
    IMPORTING
      NEWDATE       = p_date.

获得某个日期所在的周

DATE_GET_WEEK

function date_get_week.

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

*"*"Lokale Schnittstelle:

*" IMPORTING

*" VALUE(DATE) LIKE SCAL-DATE

*" EXPORTING

*" VALUE(WEEK) LIKE SCAL-WEEK

*" EXCEPTIONS

*" DATE_INVALID

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

获得某周的第一天

WEEK_GET_FIRST_DAY

=============================================

function week_get_first_day.

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

*"*"Lokale Schnittstelle:

*" IMPORTING

*" VALUE(WEEK) LIKE SCAL-WEEK

*" EXPORTING

*" VALUE(DATE) LIKE SCAL-DATE

*" EXCEPTIONS

*" WEEK_INVALID

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

============================================

上述两个函数的功能已经包含在 HR_GBSSP_GET_WEEK_DATES 中了。

从数据表中获得指定语言每周七天的名称,例如中文就是星期一、星期二......星期日,英文就是Sunday、Monday......Saturday。

WEEKDAY_GET

FUNCTION WEEKDAY_GET.

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

*"*"Lokale Schnittstelle:

*" IMPORTING

*" VALUE(LANGUAGE) LIKE SY-LANGU DEFAULT SY-LANGU

*" EXPORTING

*" VALUE(RETURN_CODE) LIKE SY-SUBRC

*" TABLES

*" WEEKDAY STRUCTURE T246

*" EXCEPTIONS

*" WEEKDAY_NOT_FOUND

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

函数模块作用:

从数据表中获得指定语言每周七天的名称,例如中文就是星期一、星期二......星期日,英文就是Sunday、Monday......Saturday。

输入参数:

LANGUAGE:定语言代码,可以省略,如果不填就是当前登录语言。注意,在调用时如果指定某种特定语言,必须用一个字节的语言代码,例如中文是 1、英文是 E......,而不能用 ZH、EN,语言代码参见表 T002。

输出参数:

RETURN_CODE:返回码,查询数据库获得的返回码。但是由于这个函数会抛出异常,因此返回码的作用不大。

表:

WEEKDAY:结构与透明表 T246 相同,用来存储返回给用户的周日名称。

异常:

WEEKDAY_NOT_FOUND:没有找到周日的描述。

获得一年的中的周数,或者最后一周

Bkk_get_lastweek_of_year

可以直接得到往前往后的年月

HR_CALC_MONTH

相关推荐
西岸行者2 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意2 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码2 天前
嵌入式学习路线
学习
毛小茛3 天前
计算机系统概论——校验码
学习
babe小鑫3 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms3 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下3 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。3 天前
2026.2.25监控学习
学习
im_AMBER3 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J3 天前
从“Hello World“ 开始 C++
c语言·c++·学习