将TIMESTAMPL(时间戳长)转换为TIMESTAMP,以60结尾

ine*_*tom 5 abap

我有一个OData服务返回一些DateTime值。它们TIMESTAMPL与其他数据一起保存在后端的表中。

现在有价值20160630084459.5000。随着MOVE-CORRESPONDING进入et_entityset,在哪里TIMESTAMP。由于四舍五入,它得到20160630084460,因为秒必须在00和之间59,所以这不是要返回的有效值。

我的主要问题是,我的表中有很多条目,因此我需要一种高性能的方法来修复此错误。

Jag*_*ger 3

这是一种将其转换为您想要的内容的方法。

REPORT zzy NO STANDARD PAGE HEADING.

FORM convert_timestamp.
  DATA(l_t1) = CONV timestampl('20160630084459.5000').
  DATA: l_t2 TYPE timestamp.
  l_t2 = l_t1.
  WRITE / : l_t1, l_t2.
  CONVERT TIME STAMP l_t1 TIME ZONE sy-zonlo INTO DATE DATA(l_date) TIME DATA(l_time).
  CONVERT DATE l_date TIME l_time INTO TIME STAMP l_t2 TIME ZONE sy-zonlo.
  WRITE / l_t2.
ENDFORM.

START-OF-SELECTION.
  PERFORM convert_timestamp.
Run Code Online (Sandbox Code Playgroud)

这是输出。

20.160.630.084.459,5000000
20.160.630.084.460
20.160.630.084.459