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
相反,为了获得预期值,最好的方法是什么?
可靠地添加/减去日期的一种方法是使用功能模块,例如RP_CALC_DATE_INTERVAL
SAP Wiki中有一个代码示例:http://wiki.sdn.sap.com/wiki/display/ABAP/add+或+减去+日期,+月,年+至+日期
否则,您应该始终修改日期类型字段,然后在完成计算后将数据复制到字符串字段中(如果需要(。
我不得不承认,你表现出的行为似乎不符合逻辑,我在我们的系统中重复了它,并得到了同样的结果。
我怀疑赋值给左手(字符串(会导致加法结果在赋值之前转换为整数。
EDIT对不起,我意识到你在其他测试中也这么做了,所以我删除了我的示例,只留下解释。
请考虑中ABAP关键字文档中的以下内容以数字方式访问类似字符的日期字段和时间字段:
对类似字符的日期字段和时间字段的数字访问利用将类型d和t转换为数值生成整数天或秒。这适用特别是在中使用类似字符的日期字段和时间字段时数值计算,其中这些字段转换为相应的计算类型。
因为系统进行隐式类型转换,所以可以想象,因为加法涉及整数,所以在赋值之前,结果类型会转换为整数。
在其他示例中,赋值不是加法的结果,而是显式变量。