2012-01-29 35 views
0

我需要編寫一個需要系統日期(sy-datum)的程序&顯示未來8年的一年中的季節。打印使用系統日期(sy-datum)的季節練習

WRITE:'當前季節是',季節 您在那裏添加三個月到您的日期和打印季節& 日期。在2020年年底時停止循環。 注意:需要使用ABAP

+1

你有什麼試過,你有什麼具體問題實施呢? – Mat 2012-01-29 20:22:42

+0

這個問題似乎是無關緊要的,因爲它似乎在要求某人爲他們完成工作。不顯示任何事先的努力或一段代碼的問題。 (爲什麼他們從Off-Topic關閉中刪除該選項?) – mydoghasworms 2014-01-15 12:11:38

回答

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 
+0

本賽季取決於你所居住的半球的部分,所以'get_season'程序應該有所增強。 – Jagger 2012-01-30 19:27:14

+0

拉納大衛將不得不自己想出額外的功勞;) – tomdemuyt 2012-01-30 19:32:08

+1

此外,這是不支持另一種語言,而不是英語:)也許使用可以被翻譯,而不是字符串的消息。更多「企業」這種方式。 – 2012-01-31 09:15:38

-1

有在函數生成器提供了很多功能模塊添加的日期的月,並返回新的日期。用它們來確定的日期,然後用另一個函數來計算當前month.Compare他們以確定季節,從而解決問題。

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月是冬天,如果您有不同的要求,您可能需要修改。對於季節的天文定義,你可以用IF...ELSEIF解析l_date+4