日期到字符串增量问题

时间:2013-02-22 07:32:02

标签: string sap abap

DATA: l_str TYPE string,
    l_dat TYPE d.

l_dat = sy-datum.
l_str = l_dat.
WRITE:/ l_str.

l_dat = ( sy-datum + 1 ).
l_str = l_dat.
WRITE:/ l_str.
l_dat = sy-datum.

l_dat = ( l_dat + 1 ).
l_str = l_dat.
WRITE:/ l_str.

l_dat = sy-datum.
l_str = ( l_dat + 1 ).
WRITE:/ l_str.

输出结果(特别是最后一行):

  20130222
  20130223
  20130223
  734909

这样做的最佳方式是什么,以便始终获得预期值?

2 个答案:

答案 0 :(得分:2)

可靠地添加/减去日期的一种方法是使用功能模块,例如, RP_CALC_DATE_IN_INTERVAL

SAP Wiki中有一个代码示例: http://wiki.sdn.sap.com/wiki/display/ABAP/add+or+subtract+dates,+months,years+to+date

否则,您应该始终对日期类型字段进行修改,然后在完成计算后将数据复制到字符串字段中(如果需要)。

我必须同意你所展示的行为似乎不符合逻辑,我已在我们的系统中复制它并获得相同的结果。

答案 1 :(得分:2)

我怀疑左手赋值(字符串)会导致在赋值发生之前将加法结果转换为整数。

编辑抱歉,我意识到你在其他测试中这样做了,所以我删除了我的例子,只是留下了解释。

以数字方式访问类似字符的日期字段和时间字段的ABAP关键字doc中考虑以下内容:

  

对类似字符的日期字段和时间字段漏洞进行数字访问   将类型d和t转换为数值的事实   产生整数天或秒。这适用   特别是在使用类似字符的日期字段和时间字段时   数值计算,这些字段转换为   相应的计算类型。

因为系统进行了隐式类型转换,所以可以想象,因为加法涉及一个整数,所以在赋值之前将结果类型转换为整数。

在其他示例中,赋值不是添加的结果,而是显式变量。