我有一个OData服务返回一些DateTime
值。它们保存在后端的表中TIMESTAMPL
(包含其他一些数据)。
现在有值20160630084459.5000
。将MOVE-CORRESPONDING
放入et_entityset
,其中TIMESTAMP
为20160630084460
。由于四舍五入,它得到00
,因为秒必须在59
和*.CS
之间,这不是一个有效的返回值。
我的主要问题是,我的表有很多条目,所以我需要一种高效的方法来解决这个错误。
答案 0 :(得分:3)
首先,您的YYYYMMDD
值不正确。前八个位置不符合20160630084459.5000
模式。所以我认为它应该是20163006084459.5000
而不是20160630
(20163006
与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.
)。
其次,这是将其转换为您想要的方式。
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命令。如果不是它会变得更复杂,你会受到性能影响。