zoukankan      html  css  js  c++  java
  • [SAP ABAP开发技术总结]日期函数

    21.1.     日期函数

    21.1.1.           日期、时间验证

    DATE_CHECK_PLAUSIBILITY:检查一个日期是否是有效格式,如果不是有效日期,则报异常:

    CALL FUNCTION 'DATE_CHECK_PLAUSIBILITY'
     
    EXPORTING
       
    date                      = '20110229'
     
    EXCEPTIONS
        plausibility_check_failed
    = 1
       
    OTHERS                    = 2.
    IF sy-subrc <> 0.
    ENDIF.

    TIME_CHECK_PLAUSIBILITY:时间有效性检查,与上面日期有效性检查使用方式相同

    21.1.2.           内部转换外部格式

    FORMAT_DATE_4_OUTPUT将数据库中8位的日期(YYYYMMDD)转换为指定的任意格式

    image475

    image476

    注意:在程序中,日期格式要使用大写格式。

     

    CONVERT_DATE_TO_EXTERNAL将数据库中的8内部日期(YYYYMMDD)以当前Client设置的外部日期格式显示:

    image477

    21.1.3.           外部转内部格式

    CONVERT_DATE_TO_INTERNAL将外部日期(要符合Client设置的日期格式)转换为数据库内部日期(YYYYMMDD

    INPUT:      02/03/2008    "Should be same as the user's default setting

    OUPUT:     20080203

    CONVERT_DATE_INPUT将外部日期(要符合Client设置的日期格式)转换为数据库内部日期

    DATA: d TYPE d.
    CALL FUNCTION 'CONVERT_DATE_INPUT'
     
    EXPORTING
       
    input                     = '2011.10.18'
        plausibility_check       
    = 'X'"进行日期有效性验证
     
    IMPORTING
       
    output                    = d
     
    EXCEPTIONS

        plausibility_check_failed
    = 1
        wrong_format_in_input    
    = 2
       
    OTHERS                    = 3.

    image478

    21.1.4.           获取Client格式

    获取当前Client端的日期格式与时间格式:

    SELECT datfm INTO lv_datfm FROM usr01 UP TO 1 ROWS WHERE bname = zname . ENDSELECT.

    image479 

    image480 image481

    21.1.5.           日期加减

    RP_CALC_DATE_IN_INTERVAL加减自然年、自然月,还可以加减天数(一般加多少天直接通过日期类型就加减就可以了,但如果向下面那样需要在20070101加上11个月零28天时,就很有用了):

    image482

    21.1.6.           转成工厂日期

    DATE_CONVERT_TO_FACTORYDATE:如果输入的是周末与公共节假日,则将它把调整为工厂日历日期(工作日期):

    DATA: date        LIKE scal-date,
          factorydate 
    LIKE scal-facdate,
          workday     
    LIKE scal-indicator.
    CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
     
    EXPORTING
    "如果输入的日期不是工作日,则是该函数会返回离该输入的节假日前或者后面的最近的工作日,是返回前面还是后面由  +/- 来决定    +:返回后面最近的工作日 -:返回前面最近的工作日默认就是+
    *   CORRECT_OPTION                     = '+'
       
    date                               = '20111119'
    "使用的工厂日历ID,可以从
     T001W-FABKL 中获取
        factory_calendar_id               
    = 'CN'
     
    IMPORTING
    "如果输入的是节假日,则返回是经过转换过了的工作日;如果输入的就是工作时,则返回的是自身,格式为 YYYYMMDD
      
    date                               = date
    "返回的工作日在指定的工作日历中位于第几个工作日,一般对我们没什么作用
       factorydate                       
    = factorydate
    "
    标示返回的DATE是否是工作日,如果为空,则是,如果为 + ,表示返回的是输入的节假日后面最近一个工作;如果为 - ,表示返回的是输入的节假日前面最近一个工作日。
       workingday_indicator              
    = workday.
    WRITE:/ date , factorydate, workday.

     

    其中工厂日历的代码按工厂号到表T001W上取:

    SELECT SINGLE fabkl INTO l_fabkl FROM t001w  WHERE werks = im_mt61d-werks.

     

    FACTORYDATE_CONVERT_TO_DATE该函数可以将DATE_CONVERT_TO_FACTORYDATE返回的factorydate(工作日序号:工作日在指定的工作日历中位于第几个工作日)转换成工作日,也可以用在“加几个工作日”的应用中:比如给某个时间加上几个工作日时,可以先使用DATE_CONVERT_TO_FACTORYDATE函数将某个时间转换为工厂日期,并获取factorydate工作日序号,再在这个工作日序号上加上几个工作日,得到新的工作日序号,然后再将这个新的工作日序号传递给FACTORYDATE_CONVERT_TO_DATE函数,得到最终的新的工作日期:

    image483

    工厂日历定义表为TFACD(节假日历定义表THOCD),表里存储了工厂日历IDTFACD-IDENT)与节假日历IDTFACD-HOCID)的关系,所以只要知道了工厂日历ID,则要使用节假日历ID则可以查询出来(注:工厂日历ID还可以通过T001W来查询得到):

    image484

    工厂日历相关表是以“TFA”开头的表,节假日历相关的表是以“THO”开头相关的表

    21.1.7.           日期属性

    DAY_ATTRIBUTES_GET查看某日期的属性(休息日、节假日、星期几):

    CALL FUNCTION 'DAY_ATTRIBUTES_GET'
     
    EXPORTING
       FACTORY_CALENDAR                
    = 'CN'引用表字段TFACD-IDENT
    *   HOLIDAY_CALENDAR                 = ' '引用表字段THOCI-IDENT
       DATE_FROM                       
    = '20110428'
       DATE_TO                         
    = '20110510'
    *   LANGUAGE                         = SY-LANGU
    *   NON_ISO                          = ' '
    * IMPORTING
    *   YEAR_OF_VALID_FROM               =
    *   YEAR_OF_VALID_TO                 =
    *   RETURNCODE                       =
     
    TABLES
        day_attributes                  
    = attr .
    image485

    image486 image487

    21.1.8.           节假日

    HOLIDAY_CHECK_AND_GET_INFO判断某天是否是假日,并且可以返回该日期所对应的节假日信息。

    DATA attr TYPE casdayattr OCCURS 0.
    DATA: is_hol .
    DATA: THOL TYPE THOL OCCURS 0.
    CALL FUNCTION 'HOLIDAY_CHECK_AND_GET_INFO'
     
    EXPORTING
       
    date                               = '20100529'
        holiday_calendar_id               
    = 'Z1'
       
    "需要返回节假日属性内表信息
       with_holiday_attributes           
    = 'X'
     
    IMPORTING
      
    "
    是否节假日(注:周末不是节假日,但是一种休息日
       holiday_found                     
    is_hol
      
    "Attributes of the found public holidays The table contains

      
    "the holiday aAttributes, if the specified date is a holiday.
      
    "The attributes must be passed in a table because several
      
    "holidays can fall on a date.即一天有可能有两个节,所以需要使用内表接收
     
    TABLES
       holiday_attributes                
    = THOL.

    21.1.9.           年月选择框

    POPUP_TO_SELECT_MONTH弹出一个对话框显示月份和年度下拉列表,让用户选择年与月

    image488

    输入:
    ACTUAL_MONTH
              当前月份(弹出框中的默认值),必须填写。形式为 YYYYMM
    FACTORY_CALENDAR
    工厂日历,可以省略,默认值为空。更多信息请参考表 TFACD
    HOLIDAY_CALENDAR
       公共假日日历,可以省略,默认值为空。更多信息请参考表 THOCI
    LANGUAGE
                       语言,可以省略。用来指定月份名称用哪种语言显示,不指定就是当前登录语言。
    START_COLUMN
              弹出对话框出现的位置,列,可以省略,默认值为 8
    START_ROW
                     弹出对话框出现的位置,行,可以省略,默认值为 5
    输出:
    SELECTED_MONTH
         选择的月份,如果按了取消按钮,则值为 000000
    RETURN_CODE
                返回码,如果按了取消按钮,则值为 4,否则为 0


    说明:工厂日历和公共假日日历主要用来限制下拉列表中的可选年份范围。如果不指定,就是当前年前后各 50 年,共 100

    21.1.10.      财政年

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

    21.1.11.      星期翻译对照表

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

    image489

    输入参数:

    LANGUAGE:指定语言代码,可以省略,如果不填就是当前登录语言。注意,在调用时如果指定某种特定语言,必须用一个字节的语言代码,例如中文是 1、英文是 E……,而不能用 ZHEN,语言代码参见表 T002
    输出内表:WEEKDAY:结构与透明表 T246
    相同,用来存储返回给用户的周日名称。

    21.1.12.      日期所在周末、天/周、周/

    HR_GBSSP_GET_WEEK_DATES获得某个日期所在周的周六周日、所在周的第几天、所在年的第几周:

    image490

    输入参数:
    P_PDATE
    :一个日期,必须填写。
    输出参数:
    P_SUNDAY
    :该周的周日,在 SSP 日期系统中,周日为第一天。
    P_SATURDAY
    :该周的周六,在 SSP 日期系统中,周六为最后一天。
    P_DAY_IN_WEEK
    :输入日期在当周的第几天,周日第 1 天,周一第 2 天,依此类推,周六第 7 天。
    P_WEEK_NO
    :该周是年度的第几周。6 位数字,格式为 YYYYWW,前四位是年,后两位是周。
    说明:SSP Statutory Sick Pay
    的缩写

     

    该函数包括了以下两个函数的功能:

    DATE_GET_WEEK获得某个日期所在的周

    image491

    image492

    WEEK_GET_FIRST_DAY计算某周的第一天(如下面的1999年的第52周第一天):

    image493

  • 相关阅读:
    Mac 安装brew的正确姿势
    Jmeter分布式压测及踩坑记录
    Jmeter录制脚本
    mitmproxy使用详解
    Python单元测试框架pytest常用测试报告类型
    基于Java+Spring Boot开源项目JeeSite的Jenkins持续交付介绍
    Maven入门
    Linux Shell 编程基础详解——吐血整理,墙裂推荐!
    使用Jenkins+Blue Ocean 持续构建自动化部署之安卓源码打包、测试、邮件通知
    使用Jenkins+Pipline 持续构建自动化部署之安卓源码打包、测试、邮件通知
  • 原文地址:https://www.cnblogs.com/jiangzhengjun/p/4265733.html
Copyright © 2011-2022 走看看