1. 導入:なぜ時刻取得が重要なのか
業務システムにおいて、処理時間の計測やログ出力、あるいはトランザクションの発生時刻記録は不可欠です。しかし、COBOL開発において「現在時刻をどう取得するか」で迷う方も多いのではないでしょうか。今回は、標準で提供されている組込関数「CURRENT-DATE」を使い、必要な時刻情報をピンポイントで抽出するテクニックを解説します。
2. 基礎知識:CURRENT-DATEの構造
「CURRENT-DATE」は、呼び出されると16桁の文字列を返します。この文字列は、西暦(1-4桁)、月(5-6桁)、日(7-8桁)、時刻(9-14桁)、ミリ秒(15-16桁)という構成になっています。
今回注目する9桁目から14桁目は「HHMMSS」の形式です。この仕組みを理解することで、複雑な編集なしで時刻データを扱うことが可能になります。
3. 実装・解決策:部分参照による抽出
COBOLの「部分参照」機能を使えば、戻り値全体を解析する必要はありません。関数呼び出しの直後に括弧を付け、開始位置と長さを指定することで、必要な「時・分・秒」だけをスマートに取り出せます。
4. サンプルプログラム
以下のコードは、現在時刻を取得し、ログ出力に適した形式で編集する実用的な例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. GET-TIME-SAMPLE.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
- 16桁のCURRENT-DATEを受け取るための領域
01 WS-CURRENT-DATE PIC X(16).
- 時刻を格納する領域(HHMMSS)
01 WS-TIME PIC X(06).
- 表示用に編集した時刻(HH:MM:SS)
01 WS-TIME-EDITED PIC X(08).
PROCEDURE DIVISION.
> 組込関数で現在日時を取得
MOVE FUNCTION CURRENT-DATE TO WS-CURRENT-DATE.
> 9桁目から6文字(HHMMSS)を抽出
MOVE WS-CURRENT-DATE(9:6) TO WS-TIME.
> 編集記号を使って HH:MM:SS 形式に変換
MOVE WS-TIME(1:2) TO WS-TIME-EDITED(1:2).
MOVE ‘:’ TO WS-TIME-EDITED(3:1).
MOVE WS-TIME(3:2) TO WS-TIME-EDITED(4:2).
MOVE ‘:’ TO WS-TIME-EDITED(6:1).
MOVE WS-TIME(5:2) TO WS-TIME-EDITED(7:2).
DISPLAY ‘現在時刻: ‘ WS-TIME-EDITED.
GOBACK.
5. 応用・注意点:現場で役立つポイント
ミリ秒の活用
もし高精度なログが必要な場合は、15-16桁目(ミリ秒)も活用してください。処理のボトルネック調査など、ミリ秒単位の性能測定には欠かせません。
注意点:ロケールとシステム時刻
「CURRENT-DATE」は、実行環境(OS)のシステム時刻を参照します。サーバーのタイムゾーン設定が意図したものになっているか、必ず確認してください。また、バッチ処理で時刻を厳密に管理したい場合は、処理の開始時と終了時にそれぞれ関数を呼び出し、差分を計算することで正確な処理時間を算出できます。
古くからある関数ですが、使いこなせば非常に強力な武器になります。ぜひ次回の開発でお試しください!

コメント