将timestamp(时间戳长)转换为以60结尾的timestamp



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

现在有值20160630084459.5000。与MOVE-CORRESPONDING进入et_entityset,其中它是一个TIMESTAMP。因为四舍五入,它得到20160630084460,因为秒数必须在0059之间,所以这不是一个要返回的有效值。

我的主要问题是,我的表有非常多的条目,所以我需要一个性能的方法来修复这个错误。

这里有一个方法可以将它转换成你想要的。

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.

输出如下:


20.160.630.084.459, 500000020.160.630.084.460
20.160.630.084.459

你在问题中提到地板,但事实并非如此。该值是四舍五入的。如果你在TIMESTAMPLTIMESTAMP的作业中使用FLOOR,你会得到你想要的答案。如果你必须使用MOVE-CORRESPONDING,只需先这样做,然后为时间戳做一个单独的赋值。

然而,这意味着0:59.9将被翻译为0:59而不是1:00。如果您的应用程序没有问题,那么只需使用FLOOR命令。如果不这样做,它将变得更加复杂,并且您将受到性能影响。

相关内容

最新更新