热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[SAPABAP开发技术总结]日期函数

21.1.日期函数26521.1.1.日期、时间验证26521.1.2.内部转换外部格式26521.1.3.

 

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)转换为指定的任意格式

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

 


推荐阅读
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了如何使用elementui分页组件进行分页功能的改写,只需一行代码即可调用。通过封装分页组件,避免在每个页面都写跳转请求的重复代码。详细的代码示例和使用方法在正文中给出。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
author-avatar
mobiledu2502881467
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有