网站首页 > 精选教程 正文
在跨系统调用交互中,经常会调用Java系统接口,而一般Java系统的接口都会使用时间戳戳进行加签,进而防止数据被篡改。在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
).
注意时区的转换
可以使用https://tool.lu/timestamp/ 工具测试。
看上面的工具里面写了一个java的为什么和其他系统的时间戳存储方式不一致。java实际上是按照unix的时间戳来处理的。参考wiki百科
Unix 时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。一个小时表示为UNIX时间戳格式为:3600秒;
一天表示为UNIX时间戳为86400秒,闰秒不计算。
在大多数的 Unix 系统中 Unix 时间戳存储为 32 位,这样会引发 2038 年问题或 Y2038。
这个还是一个比较有意思的话题。
所以在ABAP到UNIX需要进行一个这样的转换。
根据上面的Wiki的说明我们看一下cl_pco_utility=>convert_abap_timestamp_to_java
发现实际上,他里面有一个把日期用减掉19700101步骤,相当于我们的ABAP的日期就从19700101开始计算。然后把计算结果得到的天转换为秒,再加上时间转换为秒。再把结果转换为毫秒。最后再加上毫秒的数据
这样就计算出了Unix 时间(毫秒级别)了。同样其他级别的时间我们也可以这样计算。
所以只要懂原理,逻辑是很简单。
猜你喜欢
- 2024-11-12 Java时间类介绍:Date的使用 java中datetime数据类型
- 2024-11-12 Java 阴历阳历转换 java转化日期格式
- 2024-11-12 Java 日期类型比较没有返回正确的结果
- 2024-11-12 Java8 新特性:新日期与时间 java新时间类
- 2024-11-12 Java中有哪些可以用于日期和时间的API?
- 2024-11-12 Java常用日期操作类 java 日期处理类
- 2024-11-12 日期时间--JAVA成长之路 日期格式 java
- 2024-11-12 java8日期类型属性指定格式序列化配置优先级问题
- 2024-11-12 日期时间API之TemporalAdjusters与TemporalAdjuster
- 2024-11-12 DATE #4、Java操作日期时间-④.自定义时间调节器-放假通知
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)