UNIX时间戳(Epoch)的时间转换-自19700101起的秒

2020-08-16 04:34发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)在UNIX时间戳和ABAP日期/...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


在UNIX时间戳和ABAP日期/时间格式之间转换是否有标准的FM?

有什么比这段代码短吗?

数据:i(20)输入n。

 数据:d型sy-datum。
 数据:t类型sy-uzeit。

 i = 2177452123。
 d ='19700101'。
 d = d + i div 86400。
 t =我mod 86400。

 写:d,t。
3条回答
2020-08-16 04:58

嗨,

您的解决方案是正确的。 但是,它不考虑毫秒部分。

您可以使用此类:CL_PCO_UTILITY => CONVERT_JAVA_TIMESTAMP_TO_ABAP。

请参阅此旧博客评论: https://blogs.sap.com/2017/04/18/abap-unix-timestamp/#comment-373331

如果您的系统中不存在此类,则以下是代码以及方法签名:

 **方法签名:
IV_TIMESTAMP TYPE STRING自1970年1月1日格林威治标准时间00:00:00以来的毫秒数 EV_DATE TYPE SYDATE SYST的日期数据元素 EV_TIME TYPE SYUZEIT日期和时间,当前Application Server时间 EV_MSEC TYPE NUM03剩余毫秒
 METHOD convert_java_timestamp_to_abap。
   数据:
     lv_date TYPE sy-datum,
     lv_days_i TYPE i,
     lv_sec_i TYPE i,
     lv_timestamp TYPE时间戳,
     lv_timsmsec TYPE时间时间戳。
   常数:
     lc_day_in_sec类型i值86400。


 * IV_TIMESTAMP自格林威治标准时间1970年1月1日00:00:00起存储毫秒
   lv_timestamp = iv_timestamp/1000。"以秒为单位的时间戳
 *一天有86400秒:时间戳记以天为单位
   lv_days_i = lv_timestamp DIV lc_day_in_sec。
   lv_date ='19700101'。
   ev_date = lv_date + lv_days_i。
 *休息秒(时间戳-天)
   lv_sec_i = lv_timestamp MOD lc_day_in_sec。
   ev_time = lv_sec_i。
 *休息秒和毫秒
   lv_timsmsec = lv_timestamp MOD lc_day_in_sec。
   lv_timsmsec = lv_timsmsec-lv_sec_i。
   ev_msec = lv_timsmsec * 1000。


 终结法。

 

一周热门 更多>