【COBOL学習|豆知識】COBOLの時刻取得はこれ1択!CURRENT-DATE関数の賢い使い方

導入:なぜ今、CURRENT-DATEなのか

業務システムにおいて、ログの記録や帳票の作成、バッチ処理の開始・終了時刻の判定など、「現在時刻の取得」は避けて通れない処理です。COBOLには古い時代からの名残で様々な日付取得命令がありますが、現代のCOBOL開発において最も確実で、かつ汎用性が高いのが今回紹介するCURRENT-DATE関数です。OSの差異に依存せず、正確な日時を21文字で一括取得できるため、可読性と保守性の両面から強く推奨される技術です。

基礎知識:21文字の構造を理解する

CURRENT-DATE関数は、システムから取得した情報を以下の形式で返します。
YYYYMMDDHHMMSSssssss+HHMM
(年・月・日・時・分・秒・マイクロ秒・グリニッジ標準時との時差)

この関数が素晴らしいのは、日付と時刻がひとまとめになっている点です。昔ながらのACCEPT命令で日付と時刻を別々に取得すると、処理の途中で日付が跨いでしまうというリスク(いわゆる日付の不整合)がありますが、CURRENT-DATEなら1回の呼び出しで全情報を取得できるため、その心配がありません。

実装・解決策:グループ項目への格納

この関数を扱う際のポイントは、受け取り側を「21文字のグループ項目」として定義することです。個別の項目にバラして定義しておけば、MOVE命令一つで「年」や「秒」を自由に取り出すことができます。

サンプルプログラム

以下のコードは、現在時刻を取得し、編集して表示する実用的な例です。

IDENTIFICATION DIVISION.
PROGRAM-ID. GET-TIME-SAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.

  • CURRENT-DATEを受け取るための21文字の定義

01 WS-DATE-TIME.
05 WS-YEAR PIC X(4).
05 WS-MONTH PIC X(2).
05 WS-DAY PIC X(2).
05 WS-HOUR PIC X(2).
05 WS-MINUTE PIC X(2).
05 WS-SECOND PIC X(2).
05 WS-MICRO PIC X(6).
05 WS-DIFF PIC X(5).

PROCEDURE DIVISION.

  • 関数を実行してグループ項目に格納

MOVE FUNCTION CURRENT-DATE TO WS-DATE-TIME.

  • 結果をコンソールに出力

DISPLAY “現在の日付: ” WS-YEAR “/” WS-MONTH “/” WS-DAY.
DISPLAY “現在の時刻: ” WS-HOUR “:” WS-MINUTE “:” WS-SECOND.

GOBACK.

応用・注意点:現場で役立つアドバイス

現場でよくある失敗は、「日付の計算」にこの関数を直接使ってしまうことです。CURRENT-DATEはあくまで「現在時刻のスナップショット」です。例えば「1日後の日付」を求める場合は、取得した値を整数値に変換するか、COBOLの整数演算機能を併用する必要があります。

また、マイクロ秒(ssssss)の部分は開発環境やコンパイラの設定によっては0で埋められることがあります。高精度な時刻計測が必要な場合は、事前に開発環境の仕様を確認してください。些細なことですが、こうした関数の特性を理解しておくことが、バグのない堅牢なシステム構築への近道となります。

コメント

タイトルとURLをコピーしました