ABAPのタイムスタンプを日時に変換する方法|タイムゾーンに注意

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値をローカル時刻として文字列分割し、日付がずれる。
  • サマータイムの切替で存在しない、または重複するローカル時刻を考慮しない。
  • 抽出条件の「以降・より後」を混同して、差分処理で重複や欠落を起こす。

参考・関連記事

関連記事

PAGE TOP