前言
## 关于Unix时间戳(Unix timestamp)
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
长时间戳,则是 指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总毫秒数。
ABAP中转换
在ABAP中可以使用
cl_pco_utility=>convert_abap_timestamp_to_java方法可以将ABAP中的日期和时间转换成到毫秒的长时间戳。
但是注意,需要先将北京时间(UTC+8)转换为 格林威治时间(UTC)时间,中间相差8个小时的时差。 cl_pco_utility=>
convert_java_timestamp_to_abap 方法可以将长 时间戳转 ABAP中的日期和时间 。
同样注意, 8个小时的时差。 ABAP示例代码如下:
DATA: lv_date TYPE d, lv_time TYPE t.DATA: lv_timestampl TYPE string, lv_timestamps TYPE string.
lv_date = sy-datum.lv_time = sy-uzeit.CONVERT DATE lv_date TIME lv_time INTO TIME STAMP DATA(ts) TIME ZONE sy-zonlo.*GET TIME STAMP FIELD DATA(ts).CONVERT TIME STAMP ts TIME ZONE 'UTC' INTO DATE DATA(date) TIME DATA(time).
*ABAP时间转Unix时间戳cl_pco_utility=>convert_abap_timestamp_to_java( EXPORTING iv_date = date iv_time = time IMPORTING ev_timestamp = lv_timestampl ).DATA(lv_len) = strlen( lv_timestampl ) - 3 .*短时间戳lv_timestamps = lv_timestampl(lv_len).cl_demo_output=>display( |Date:{ lv_date } Time:{ lv_time } -> TimestampLong:{ lv_timestampl } TimestampShort:{ lv_timestamps }| ).
*Unix时间戳转ABAP时间cl_pco_utility=>convert_java_timestamp_to_abap( EXPORTING iv_timestamp = lv_timestampl IMPORTING ev_date = date ev_time = time ).CONVERT TIME STAMP CONV timestamp( date && time ) TIME ZONE 'UTC+8' INTO DATE date TIME time.cl_demo_output=>display( |TimestampLong:{ lv_timestampl } -> Date:{ lv_date } Time:{ lv_time } | ).结果如下
总结
在做接口项目中,Unix时间戳用途比较广泛, cl_pco_utility标准类提供了方法,使用起来比较简单,无需自己再造轮子去计算。