導入:なぜ今、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で埋められることがあります。高精度な時刻計測が必要な場合は、事前に開発環境の仕様を確認してください。些細なことですが、こうした関数の特性を理解しておくことが、バグのない堅牢なシステム構築への近道となります。

コメント