導入:なぜLOCALE-DATE関数を使うのか
COBOLでシステムを開発していると、必ずと言っていいほど直面するのが「日付の表示形式」という課題です。日本国内向けなら「YYYY/MM/DD」で固定していても問題ありませんが、海外拠点を持つ企業や、多言語対応が必要な帳票を出力する場合、国によって日付の書き方は様々です。例えば、米国なら「MM/DD/YYYY」、欧州の一部では「DD.MM.YYYY」が一般的です。
これまで、わざわざ国コードを判定して編集(MOVE)文を書き分けていた方もいるかもしれません。今回紹介する「LOCALE-DATE関数」を使えば、システムの地域設定(ロケール)に従って、その土地に適した日付形式を自動で生成できます。保守性の高いコードを書くために、ぜひ押さえておきたいテクニックです。
基礎知識:ロケールとは何か
「ロケール(Locale)」とは、コンピュータ上で言語、地域、文字コード、日付や通貨のフォーマットなどを定義した設定のことです。COBOLの組込関数であるLOCALE-DATEは、実行環境のこの設定を参照します。
この関数を使うことで、開発者が個別に日付の編集パターン(PICTURE句での指定など)をハードコーディングする必要がなくなり、プログラムの汎用性が格段に上がります。
実装と解決策
LOCALE-DATE関数は、日付(YYYYMMDD形式)を引数として渡し、システム標準の形式に変換された文字列を返します。
注意点として、この関数が返す文字列の長さは環境によって異なります。そのため、受け取り側のデータ項目(WS-OUT-STRなど)は、十分な桁数を確保しておくことが重要です。
サンプルプログラム
以下のサンプルは、システムの日付をロケール形式に変換して表示するコードです。そのままコピーして、環境に合わせて調整してください。
IDENTIFICATION DIVISION.
PROGRAM-ID. LOCALE-TEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
- 変換元の日付(YYYYMMDD形式)
01 WS-DATE-IN PIC X(8) VALUE ‘20231027’.
- 変換後の結果を受け取る領域(余裕を持って長めに定義)
01 WS-OUT-STR PIC X(30).
PROCEDURE DIVISION.
> LOCALE-DATE関数を使用して日付を変換
MOVE FUNCTION LOCALE-DATE(WS-DATE-IN) TO WS-OUT-STR.
> 結果を出力
DISPLAY “変換前: ” WS-DATE-IN.
DISPLAY “変換後: ” WS-OUT-STR.
GOBACK.
応用・注意点:現場での活用と落とし穴
現場でこの関数を使う際、最も注意すべきは「意図しない形式になるリスク」です。
1. 実行環境の確認: 開発環境と本番環境でロケール設定が異なると、出力される日付形式も変わります。帳票のレイアウトが崩れないか、事前に環境変数(LANGなど)を確認しておきましょう。
2. 桁数オーバー: ロケールによっては非常に長い文字列(例:曜日付きや月名がフルスペル表記の場合など)が返されることがあります。受け取り側のフィールドが短いと、データが切り捨てられる(トランケート)可能性があるため、余裕を持った定義を心がけてください。
3. 固定フォーマットとの使い分け: 外部システムとの連携用データ(CSV出力など)には、LOCALE-DATEは不向きです。あくまで「画面表示」や「人間が見る帳票」のために使い、データ連携には従来通りの固定フォーマットを使用するのがベテランの流儀です。
使いこなせば、多言語対応の工数を劇的に減らせる便利な関数です。ぜひ次の開発で活用してみてください。

コメント