云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

专属服务器_db2数据库迁移_哪个好

小七 141 0

在第一篇关于sapgatewayfoundation中转换的博客文章中,我们讨论了ABAP类型系统和OData类型系统之间的差异。虽然与转换没有直接关系,但日期和时间的处理完全符合这个主题。

ABAP知道日期、时间和时间戳的不同表示。并且,它提供了执行日期和时间计算的重用函数。例如,OData有自己的日期和时间定义,其中的函数可以在$filter表达式中使用。

通常会出现不同表示如何映射以及如何实现数据提供程序以在两个世界之间创建最佳匹配的问题。当然,不可能对每一个细节都深究。但是,让我们从几个方面开始,OData中的日期和时间

为了表示日期和时间信息,版本2.0中的OData规范知道三种基本类型

Edm.DateTime文件,Edm时间,大数据指的是什么,和Edm.DateTimeOffset.

由于这对于业务应用程序规范4.0版来说并不足够,因此将切换到

Edm.日期,Edm.每日时间,Edm.DateTimeOffset,和Edm.持续时间.

我们关注规范版本2.0,并将讨论限制在Edm.DateTime文件以及Edm.DateTimeOffset. 有关表示的详细信息可以在OData规范、ISO 8601标准和中找到。在这里,我们快速列出不同的格式。文本在URI中使用,例如,在$filter表达式或键谓词中。ATOM和JSON是指请求或响应负载的内容类型。亚秒的小数位数由刻面精度决定。

Edm.DateTime文件以UTC(以前的格林威治标准时间)表示日期和时间:

JSON表示中的记号也可以是负数,以描述1970年1月1日之前的日期和时间。"\/例如,美国云服务器,日期(-6847804800000)\/"是1753年1月1日午夜。

Edm.DateTimeOffset添加与UTC相关的时区信息。日期和时间信息由标准时差(偏移量)修正,例如,中欧时间(CET)符号v:+01:00,东部标准时间(EST)符号v:-05:00。

文字或原子表示末尾的字符Z表示UTC。因此,理财返利,datetimeoffset'2016-07-08T12:34:56Z'和datetime'2016-07-08T12:34:56'是等效的。

ABAP中的日期和时间

ABAP提供了两种预定义的数据类型来处理日期(类型D)和时间(类型T)。此外,还有一个数据元素SYSTèTZONE(整数)将时区描述为与UTC的时间差(以秒为单位)。因此,日期和时间信息被分为几个字段。

但是也可以选择在单个字段中处理时间戳,并使用这些字段进行时间戳计算(例如,请参阅ABAP class CL\ U ABAP\ U TIMESTAMP\ U UTIL)。以下数据元素表示时间戳。虽然它们使用不同的基础数据类型,但它们都是由年、月、日和时间串联而成的。

但是,任何时区信息都需要单独保存。

映射

在尝试在ABAP和OData之间转换日期和时间信息时,这种分离是主要问题。通常,大数据服务,sapgatewayfoundation中的OData库只能将一个ABAP字段序列化为一个OData基元属性,并将属性反序列化为一个ABAP字段。单独的时间戳和时区信息既不能组合成一个Edm.DateTimeOffset属性,也不能将这样的属性拆分为多个ABAP字段,类型属性的任何内容Edm.DateTimeOffset在OData请求中,有效负载或请求URI被转换并以UTC格式提供给服务的数据提供者。时区信息丢失。SAP Gateway Foundation创建的OData响应只能公开UTC中的日期和时间内容。OData响应中没有添加时区信息,因为不清楚应该使用哪个时区。

转换的使用退出(请参阅"SAP Gateway Foundation中的转换–第1部分")以拆分Edm.DateTimeOffset信息或合并ABAP字段是不可能的。SAP Gateway Foundation不提供任何建立此类关系模型的方法。

因此,时区信息只能由服务的数据提供商处理。不可能将其作为Edm.DateTimeOffset属性,但仅作为类型的单独属性Edm.Int32型,例如。客户机实现需要实现所需表示的转换。

因此,我们可以坚持Edm.DateTime文件在一个小例子中总结映射时。以下屏幕截图显示了/IWBEP/IF\u MGW\u APPL\u SRV\u RUNTIME~GET\u ENTITYSET中的一个实现示例:

相应的ATOM响应将是:

,JSON响应类似:

请注意SAP Gateway Foundation无法处理TZNTSTMPLL类型的ABAP字段。它只能转换长度为15的数字时间戳信息,大数据局,将该信息作为长度为8的压缩数提供给OData库。如果您需要使用子秒,请在您的服务实现中选择十进制表示形式DEC 21,7(数据元素timestall)。

日期以时间00:00:00显示。如果由Edm.DateTime文件或者Edm.DateTimeOffset小于内部小数位数(以秒为单位)余数被截断-不进行舍入。类似地,如果需要的话,JSON表示中的记号会加上尾随的零,并切断微秒/纳秒,1753年作为日期的下限,以避免与儒略历的歧义,而版本4.0仅指前公历(包括1583年1月1日之前的预计日期),但也允许0年和负年份。在任何情况下,ABAP数据类型的初始值在Edm.DateTime文件.