2012-01-29 4 views
0

システム日付(sy-datum)を使用するプログラムを作成する必要があります&は、今後8年間の季節を表示します。システム日付(sy-datum)でシーズン練習を印刷

書き込み: '現在の季節です'、シーズン 日付に3か月を追加し、季節を印刷します。& 日付。ループの終了を2020年末に延期してください。 注:使用する必要がありますABAP

+1

何を試してみましたか、それを具体的にどのように実行していますか? – Mat

+0

この質問は、誰かに仕事を依頼するように思われるため、話題にはならないようです。コードに何らかの事前の努力や問題は示されません。 (なぜ彼らはオフトピッククローズからそのオプションを削除したのですか?) – mydoghasworms

答えて

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

+0

ラナ・デイヴィッドは余分なクレジットのために自分自身を理解しなければならないでしょう;) – tomdemuyt

+1

これは英語以外の言語をサポートしていません:)おそらく文字列の代わりに翻訳できるメッセージを使用しています。より多くの "エンタープライズ"このように。 –

-1

日を決定し、現在のmonth.Compareそれらを計算するために別の関数を使用する日付の月を追加し、それら.USE新しい日付を返す関数ビルダーで利用可能な機能モジュールがたくさんあります季節を決定し問題を解決する。

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+4IF...ELSEIFと解析することができます。

関連する問題