打印季节练习与系统日期(sy-datum)

时间:2012-01-29 20:16:51

标签: abap

我需要编写一个程序来获取系统日期(sy-datum)&显示未来8年的一年中的季节。

写道:“本赛季是',赛季 你在那里添加三个月的日期并打印季节& 日期。在2020年年底停止循环。 注意:需要使用ABAP

3 个答案:

答案 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)

功能构建器中有许多功能模块可以在日期中添加月份并返回新日期。使用它们来确定日期,然后使用另一个函数来计算当前月份。比较它们以确定季节因此问题解决了。