我需要编写一个程序来获取系统日期(sy-datum)&显示未来8年的一年中的季节。
写道:“本赛季是',赛季 你在那里添加三个月的日期并打印季节& 日期。在2020年年底停止循环。 注意:需要使用ABAP答案 0 :(得分:1)
我当然假设你的系统有功能模块ISP_MONTHS_TO_DATE,如果不是你应该在SE37中搜索* month *,那么有很多功能模块可以添加几个月到日期(如果你试图做的话)你自己,你会有错误。)
REPORT zdemo.
DATA : l_date TYPE sy-datum.
DATA : l_season TYPE string.
l_date = sy-datum.
PERFORM get_season USING l_date CHANGING l_season.
WRITE: 'The current season is', l_season. NEW-LINE.
DO.
CALL FUNCTION 'ISP_ADDING_MONTHS_TO_DATE'
EXPORTING
months = 3
start_date = l_date
IMPORTING
end_date = l_date.
IF l_date(4) GT 2020.
EXIT.
ENDIF.
PERFORM get_season USING l_date CHANGING l_season.
WRITE: 'The season on', l_date , 'is' , l_season. NEW-LINE.
ENDDO.
*&---------------------------------------------------------------------*
*& Form get_seasons
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->DATE text
* -->SEASON text
*----------------------------------------------------------------------*
FORM get_season USING p_date TYPE sydatum CHANGING p_season TYPE string.
IF p_date+4 LT '0321'.
l_season = 'Winter'.
ELSEIF p_date+4 LT '0621'.
l_season = 'Spring'.
ELSEIF p_date+4 LT '0921'.
l_season = 'Summer'.
ELSEIF p_date+4 LT '1221'.
l_season = 'Fall'.
ELSE.
l_season = 'Winter'.
ENDIF.
ENDFORM. "get_season
答案 1 :(得分:0)
我认为CL_RECA_DATE
是您正在寻找的赚钱机器。见这个例子。
DATA: l_date TYPE sydatum,
l_season TYPE string.
l_date = sy-datum.
WHILE l_date(4) <= 2020.
WRITE /: 'The current season is'.
CASE l_date+4(2).
WHEN 1 or 2 or 12. l_season = 'Spring'(001).
WHEN 3 or 4 or 5. l_season = 'Summer'(002).
WHEN 6 or 7 or 8. l_season = 'Fall'(003).
WHEN 9 or 10 or 11. l_season = 'Winter'(004).
ENDCASE.
WRITE: l_season, l_date.
l_date = cl_reca_date=>add_months_to_date( id_date = l_date
id_months = 3 ).
ENDWHILE.
如果可以使用CASE
语句来完成赛季。上面的示例假设12月到2月是冬天,如果您有不同的要求,可能需要修改它。对于季节的天文定义,您可以使用l_date+4
解析IF...ELSEIF
。
答案 2 :(得分:-1)
功能构建器中有许多功能模块可以在日期中添加月份并返回新日期。使用它们来确定日期,然后使用另一个函数来计算当前月份。比较它们以确定季节因此问题解决了。