我有一个OData服务返回一些DateTime
值。它们被保存在后端的一个表中,作为TIMESTAMPL
(与其他一些数据一起)。
现在有值20160630084459.5000
。与MOVE-CORRESPONDING
进入et_entityset
,其中它是一个TIMESTAMP
。因为四舍五入,它得到20160630084460
,因为秒数必须在00
和59
之间,所以这不是一个要返回的有效值。
我的主要问题是,我的表有非常多的条目,所以我需要一个性能的方法来修复这个错误。
这里有一个方法可以将它转换成你想要的。
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
你在问题中提到地板,但事实并非如此。该值是四舍五入的。如果你在TIMESTAMPL
到TIMESTAMP
的作业中使用FLOOR
,你会得到你想要的答案。如果你必须使用MOVE-CORRESPONDING
,只需先这样做,然后为时间戳做一个单独的赋值。
然而,这意味着0:59.9将被翻译为0:59而不是1:00。如果您的应用程序没有问题,那么只需使用FLOOR命令。如果不这样做,它将变得更加复杂,并且您将受到性能影响。