在跨系统调用交互中,常常会调用Java系统插口,而通常Java系统的插口就会使用时间戳戳进行加签linux培训,从而避免数据被篡改。在abap中怎样获取java时间戳呢?
获得系统时区当前时间戳-长格式
DATA:lv_timestampl TYPE timestampl."长时间格式的时间戳
DATA:lv_str_timestampl TYPE char22.
GET TIME STAMP FIELD lv_timestampl.
调用系统类方式进行数据获得java时间戳(微秒级别)
DATA lv_java_timestamp TYPE string.
cl_pco_utility=>convert_abap_timestamp_to_java(
EXPORTING
iv_date = conv #( lv_str_timestampl(8) )
iv_time = conv #( lv_str_timestampl+8(6) )
iv_msec = conv #( lv_str_timestampl+15(3) )
IMPORTING
ev_timestamp = lv_java_timestamp
).
注意时区的转换
可以使用工具测试。
看里面的工具上面写了一个java的为何和其他系统的时间戳储存方法不一致。java实际上是根据unix的时间戳来处理的。参考wiki百科
Unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数unix时间戳转换成时间 c,不考虑闰秒。一个小时表示为UNIX时间戳格式为:3600秒;
三天表示为UNIX时间戳为86400秒,闰秒不估算。
在大多数的Unix系统中Unix时间戳储存为32位,这样会引起2038年问题或Y2038。
这个还是一个比较有意思的话题。
所以在ABAP到UNIX须要进行一个这样的转换。
按照前面的Wiki的说明我们看一下cl_pco_utility=>convert_abap_timestamp_to_java
发觉实际上linux系统官网,他上面有一个把日期用减掉19700101步骤unix时间戳转换成时间 c,相当于我们的ABAP的日期就从19700101开始估算。之后把估算结果得到的天转换为秒,再加上时间转换为秒。再把结果转换为微秒。最后再加上微秒的数据
这样就估算出了Unix时间(微秒级别)了。同样其他级别的时间我们也可以这样估算。
所以只要懂原理,逻辑是很简单。