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

时间:2016-06-30 08:52:47

标签: abap

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

现在有值20160630084459.5000。将MOVE-CORRESPONDING放入et_entityset,其中TIMESTAMP20160630084460。由于四舍五入,它得到00,因为秒必须在59*.CS之间,这不是一个有效的返回值。

我的主要问题是,我的表有很多条目,所以我需要一种高效的方法来解决这个错误。

2 个答案:

答案 0 :(得分:3)

首先,您的YYYYMMDD值不正确。前八个位置不符合20160630084459.5000模式。所以我认为它应该是20163006084459.5000而不是2016063020163006REPORT 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. )。

其次,这是将其转换为您想要的方式。

traits

这是输出。

  

20.160.630.084.459,5000000
  20.160.630.084.460
  20.160.630.084.459

答案 1 :(得分:0)

你在问题​​中提到了楼层,但事实并非如此。该值是四舍五入的。如果您在从TIMESTAMPL到TIMESTAMP的作业中使用FLOOR,那么您将获得所需的答案。如果你必须使用MOVE-CORRESPONDING,那么先做,然后分别为时间戳做一个分配。

然而,这意味着0:59.9将被翻译为0:59而不是1:00。如果您的应用程序缺少第二个可以,那么只需使用FLOOR命令。如果不是它会变得更复杂,你会受到性能影响。