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
这样做的最佳方式是什么,以便始终获得预期值?
答案 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转换为数值的事实 产生整数天或秒。这适用 特别是在使用类似字符的日期字段和时间字段时 数值计算,这些字段转换为 相应的计算类型。
因为系统进行了隐式类型转换,所以可以想象,因为加法涉及一个整数,所以在赋值之前将结果类型转换为整数。
在其他示例中,赋值不是添加的结果,而是显式变量。