日付と時刻の計算(SY)
20.2 日付と時刻の計算(SY)
2. 日付と時刻の計算(SY)
ここでは、SAPシステムが標準で値を持っているシステム変数と呼ばれるものを理解し、
システム変数を用いて日付と時間は計算で求めます。
ここでは、以下について学びます。
- システム変数
- 日付と時刻の計算
システム変数
■システム変数
SAPシステムでは、値が自動的に設定される変数があります。
現在日付や現在日時といったシステム上で保持している情報、および直前の命令の実行結果が格納されている変数など。
システム変数一覧は、構造「SYST」に格納されています。
主なシステム変数
補足(SY-INDEX と SY-TABIX の違い)
SY-INDEX・・・処理のループパス(ループ回数)
SY-TABIX・・・現在ループしているテーブル内の行数
まず上記による違いがあります。
INDEXの方はループ処理において何周目か、
TABIXの方は、LOOP AT のループ処理で内部テーブルの何行目なのかの違いです。
例えば、
内部テーブル IT_TEST に 4レコード 登録されているとします。
その状態で下記ソースコードを実行しますと
DO 3 TIMES.
LOOP AT IT_TEST INTO ST_TEST.
WRITE /
ST_TEST.
CLEAR ST_TEST.
ENDLOOP.
ENDDO.
上記の場合、
SY-INDEX 1 , SY-TABIX 1 ,2 ,3 ,4
SY-INDEX 2 , SY-TABIX 1 ,2 ,3 ,4
SY-INDEX 3 , SY-TABIX 1 ,2 ,3 ,4
上記のように変わります。
反対に DO 3 TIMES をなくすと
LOOP AT IT_TEST INTO ST_TEST.
WRITE /
ST_TEST.
CLEAR ST_TEST.
ENDLOOP.
上記の場合、
SY-INDEX 0 , SY-TABIX 1 ,2 ,3 ,4
上記のようになります。
日付と時刻の計算
日付と時間は以下のようなサンプルコードの計算で求めることができます。
REPORT ZTEST_PROGRAM_DAY_1. DATA: WK_DATE TYPE D. SET COUNTRY ‘ '. WK_DATE = '20200115'. WRITE WK_DATE. WK_DATE+6(2) = '01'. WRITE / WK_DATE. "月初日 WK_DATE = WK_DATE - 1. WRITE / WK_DATE. "前月の月末日 SKIP. DATA: WK_TIME TYPE T, WK_TIME1 TYPE T VALUE '1000000', WK_TIME2 TYPE T VALUE '0300000'. WK_TIME = WK_TIME1 - WK_TIME2. WRITE / WK_TIME.
結果(実行時間および環境によって数値が変わります。)
補足(VALUEの次が値が、いずれも7文字になっている件について)
時刻は(hhmmss)ですので、6文字です。そのためサンプルのように仮にソースコードのように7桁で値を入れたとしても、
T型の項目長は6のため
ソースコードのように7文字で値を入れたとしても、
1000000 → 100000
0300000 → 030000
上記のように左から数えて7桁目の値は、変数に格納できずに終わり、
6文字で処理が進みます。