SAPのタイムスタンプは、日時を一つの値として扱うために使います。画面や帳票へ表示する際は、どのタイムゾーンの日時に変換するかを必ず決めてください。同じUTC時刻でも東京と別地域では表示日付が変わります。
まずはABAP標準構文
一般的なABAPでは、明示したタイムゾーンで変換できるCONVERT TIME STAMPを使えます。
DATA: lv_ts TYPE timestamp,
lv_date TYPE d,
lv_time TYPE t.
GET TIME STAMP FIELD lv_ts.
CONVERT TIME STAMP lv_ts TIME ZONE 'JAPAN'
INTO DATE lv_date TIME lv_time.
JAPANはシステムに定義されたタイムゾーンを想定した例です。利用システムのタイムゾーン定義を確認してください。利用者の表示日時に合わせる場合は、固定値ではなく適切なユーザータイムゾーンを用います。
汎用モジュールを使う場合
既存コードではIB_CONVERT_FROM_TIMESTAMP(タイムスタンプから日時)、IB_CONVERT_INTO_TIMESTAMP(日時からタイムスタンプ)が使われることがあります。引数や例外はシステムのSE37で確認し、入力値とタイムゾーンの意味を揃えてください。新規実装では、可読性と移植性を考え、まず標準構文を検討するとよいでしょう。
よくある落とし穴
- UTC値をローカル時刻として文字列分割し、日付がずれる。
- サマータイムの切替で存在しない、または重複するローカル時刻を考慮しない。
- 抽出条件の「以降・より後」を混同して、差分処理で重複や欠落を起こす。
参考・関連記事
- メッセージ管理テーブルT100:日時付きログの調査
- SM50・SM66のプロセス一覧:処理時刻の切り分け