2
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

什么是最好的方法来做到这一点,以便一如既往地获得预期值?

4

2 回答 2

2

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

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

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

我必须同意您显示的行为看起来不合逻辑,我已经在我们的系统中复制了它并得到了相同的结果。

于 2013-02-22T09:27:17.160 回答
2

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

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

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

对类似字符的日期字段和时间字段的数字访问利用了将 d 和 t 类型转换为数值产生整数天数或秒数的事实。这尤其适用于在数值计算中使用类似字符的日期字段和时间字段时,这些字段将转换为相应的计算类型。

因为系统做了隐式类型转换,所以可以想象,因为加法涉及到整数,所以在赋值之前将得到的类型转换为整数。

在您的其他示例中,分配不是加法的结果,而是显式变量。

于 2013-02-22T11:11:37.400 回答