本博客属于系列博客文章E2E Fiori场景中的主处理日期/时间
点击下一页可以查看索引页
E2E Fiori场景中的主处理日期/时间
在本博客中,我们将总结ABAP如何处理日期/时间类型的数据
ABAP有4种日期/时间数据类型,由于下表
*该表有9列,如果您不能全部看到,请选择该表并用鼠标将其向右拖动。
*有人能告诉我如何使其可见吗?
注意:
对于短时间戳,14位(8+6)就足够了。但包装编号的最小门空间是2位数。因此,数据类型本身可以为符号保存15位加1位(不用于时间戳)我将在本系列的另一个博客中解释时区的细节
下面的代码示例显示如何获取当前日期时间。
当我们谈论我想要当前日期/时间时,有几种可能性
(1)ABAP应用服务器的日期/时间(2) 数据库服务器的日期/时间(3) 安装计算机SAPGUI的日期/时间(4) 基于用户主记录中时区设置的日期/时间(4) UTC日期/时间
ABAP服务器总是将其时间同步到数据库服务器,因此通常我们可以假设(1)=(2),淘客采集软件,
当您创建日期/时间字段时,云呢拿,您需要一个时区。变量使用的时区由您的程序决定。
时间戳字段始终存储UTC时间。
用户本地时间表示在用户主记录中设置的时间。它可以由管理员在SU01中设置,也可以由用户自己在SU3中设置。如果未设置用户本地时区,则使用表TTZCU中的默认用户本地时区。一般来说,它比用户计算机中的日期/时间更有意义,因为后者容易受到客户端环境的影响。你有什么好主意吗?
当前日期/时间值在程序中的某个点进行评估,如启动程序时,屏幕显示。所以,如果您想在长期运行的ABAP代码中获得准确的时间。您需要运行GET TIME来刷新所有关于日期/时间的系统字段。
3.1将日期/时间类型处理为字符串
日期和时间可以转换为字符变量,反之亦然。
因此通常所有字符串操作都可以用于这些类型。但通常情况下,只能使用字符串操作从日期/时间变量中获取所需的部分。
以下是一些来自ABAP关键字文档的示例
3.2将日期/时间处理为整数
用于数学计算日期/时间转换为整数。
下表总结了日期/时间计算的有意义选项
*本系列博客不涉及工厂日历和基于业务场景的高级计算要求
另外,公司自助建站,如果要计算两个日期/时间之间的秒数,最好的方法是在计算之前将它们转换为时间戳。我们稍后会讨论转换问题。
3.3处理时间戳
虽然时间戳是以压缩数字的形式存储的,但您不应该这样使用。
对于时间戳的计算,您需要使用类cl\u abap\u tstmp来计算它们。
请参考SE24中的类以获取更多信息。
3.4在核心数据服务或Open SQL中处理日期/时间
下表显示了日期/时间类型的所有可能的SQL函数
只有少数函数可以在OpenSQL中使用,大多数日期/时间SQL函数只能在CD中工作使用计算字段作为筛选器或组条件将对性能产生非常糟糕的影响,尤其是对于HANA数据库(您可以认为HANA将数据存储在zip文件中当您搜索数据时,HANA可以在zip文件中找到它们并提取您需要的文件)。但如果按计算字段筛选,则需要先提取所有数据进行计算。)#TODO,在CDS数据计算最佳实践系列中添加一个博客。(数据函数和日期/时间维度)
您可以将日期/时间组合转换为时间戳,反之亦然。
4.1将日期/时间组合转换为时间戳
如我所述,日期/时间组合只有在存在时区且时间戳始终将时间保存为UTC时才有意义。
要将日期/时间组合转换为时间戳,物联网模块,必须提供时区。然后运行时将帮助您将其转换为UTC。
我将在本系列的另一个博客中解释时区的详细信息
这里有一个示例:
4.2将时间戳转换为日期/时间组合
始终使用UTC的时间戳,因此在转换为日期/时间变量时,您需要告诉ABAP您想要的变量属于哪个时区。
4.3在OpenSQL和核心数据服务中的转换
在OpenSQL中,没有办法将日期/时间转换为时间戳
对于时间戳到数据/时间,您可以先将时间戳转换为字符,然后获取所需的数字并将其转换为日期/时间。
对于CDS视图,以下函数
输出日期/时间/时间戳意味着
将这些变量输出到屏幕上将它们转换成格式化的字符/字符串
现在,格式化输出的最好方法是使用字符串模板。
如果您对此一无所知,请参考这两个惊人的博客https://blogs.sap.com/2017/03/25/string-template-in-abap-es6-angular-and-react/
本博客是一个很好的博客,向您介绍字符串模板。
https://blogs.sap.com/2017/03/25/string-template-in-abap-es6-angular-and-react/
这个博客来自Jerry。他也是SAP Mentor的成员。在这个博客中,他比较了ABAP、ES6和React的字符串模板。
日期/时间有一些有用的格式选项。