设为首页 收藏本站
查看: 1398|回复: 0

[经验分享] [SAP ABAP开发技术总结]日期函数

[复制链接]

尚未签到

发表于 2015-9-19 08:43:44 | 显示全部楼层 |阅读模式
DSC0000.gif
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4265733.html   
21.1.         日期函数... 265
21.1.1.     日期、时间验证... 265
21.1.2.     内部转换外部格式... 265
21.1.3.     外部转内部格式... 266
21.1.4.     获取Client格式... 267
21.1.5.     日期加减... 267
21.1.6.     转成工厂日期... 267
21.1.7.     日期属性... 269
21.1.8.     节假日... 270
21.1.9.     年月选择框... 271
21.1.10.            财政年... 271
21.1.11.            星期翻译对照表... 271
21.1.12.            日期所在周末、天/周、周/年... 272
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)转换为指定的任意格式
DSC0001.png
DSC0002.png
注意:在程序中,日期格式要使用大写格式。

CONVERT_DATE_TO_EXTERNAL将数据库中的8位内部日期(YYYYMMDD)以当前Client设置的外部日期格式显示:
DSC0003.png
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.
DSC0004.png
21.1.4.           获取Client格式
获取当前Client端的日期格式与时间格式:
SELECT datfm INTO lv_datfm FROM usr01 UP TO 1 ROWS WHERE bname = zname . ENDSELECT.
DSC0005.png
DSC0006.png DSC0007.png
21.1.5.           日期加减
RP_CALC_DATE_IN_INTERVAL加减自然年、自然月,还可以加减天数(一般加多少天直接通过日期类型就加减就可以了,但如果向下面那样需要在20070101加上1年1个月零28天时,就很有用了):
DSC0008.png
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函数,得到最终的新的工作日期:
DSC0009.png
工厂日历定义表为TFACD(节假日历定义表THOCD),表里存储了工厂日历ID(TFACD-IDENT)与节假日历ID(TFACD-HOCID)的关系,所以只要知道了工厂日历ID,则要使用节假日历ID则可以查询出来(注:工厂日历ID还可以通过T001W来查询得到):
DSC00010.png
工厂日历相关表是以“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 .
DSC00011.png
DSC00012.png DSC00013.png
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弹出一个对话框显示月份和年度下拉列表,让用户选择年与月
DSC00014.png
输入:
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从数据表中获得指定语言每周七天的名称,例如中文就是星期一、星期二……星期日,英文就是Sunday、Monday……Saturday
DSC00015.png
输入参数:
LANGUAGE:指定语言代码,可以省略,如果不填就是当前登录语言。注意,在调用时如果指定某种特定语言,必须用一个字节的语言代码,例如中文是 1、英文是 E……,而不能用 ZH、EN,语言代码参见表 T002
输出内表:WEEKDAY:结构与透明表 T246 相同,用来存储返回给用户的周日名称。
21.1.12.      日期所在周末、天/周、周/年
HR_GBSSP_GET_WEEK_DATES获得某个日期所在周的周六周日、所在周的第几天、所在年的第几周:
DSC00016.png
输入参数:
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:获得某个日期所在的周
DSC00017.png
DSC00018.png
WEEK_GET_FIRST_DAY计算某周的第一天(如下面的1999年的第52周第一天):
DSC00019.png
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-115622-1-1.html 上篇帖子: 修改SAP 登录后的背景图片 下篇帖子: SAP AGS面试小结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表