COBOLで日付と時刻を自由に操る!ローカライズと変換の完全ガイド
生徒
「COBOLを使ってプログラムを作りたいのですが、現在の日付や時刻を日本風の形式にして表示するにはどうすればいいのですか?」
先生
「良い着眼点ですね。コンピュータにとって日付は単なる数字の羅列ですが、人間が読みやすい形式に変換する作業をローカライズといいます。」
生徒
「ローカライズですか。初めて聞く言葉ですが、具体的にCOBOLでどう実装するのか教えてください。」
先生
「もちろんです。COBOLの基本的な命令を使って、日付を自在に操る方法を順を追って解説しましょう。」
1. 日付と時刻を扱う重要性とローカライズの基本概念
私たちが普段使っているカレンダーや時計は、当たり前のように「年・月・日」や「時・分・秒」で表示されていますよね。しかし、コンピュータの世界では、日付はそのままではただの数字の固まりとして扱われることがほとんどです。プログラミングにおいて、この数字を人間にとって意味のある形に直す作業を「ローカライズ」と呼びます。ローカライズとは、直訳すると「地域化」ですが、ITの世界では「その土地の習慣や文化に合わせて表示形式を変えること」を指します。
例えば、アメリカでは「月・日・年」の順で日付を書くことが多いですが、日本では「年・月・日」の順が一般的です。もし日本のシステムでアメリカ式の日付を表示してしまったら、事務作業で大きな混乱が起きてしまうかもしれません。COBOLのような業務システムで使われる言語では、こうした日付の正確な制御が非常に重要になります。これから、プログラムの初心者の方にもわかるように、COBOLでの日付処理の基礎から応用までを丁寧に解説していきます。
2. コンピュータはどうやって時間を知るのか?
コンピュータには、心臓部ともいえる場所に内蔵時計があります。これは電源を切っても電池などで動き続けているもので、常に現在の日時を刻んでいます。COBOLのようなプログラミング言語は、このコンピュータの内蔵時計に「今、何時ですか?」と問い合わせることで、現在時刻を取得します。
プログラミングにおいて「変数を定義する」という作業が必要になります。変数は、データを一時的に保管しておくための「箱」のようなものです。コンピュータから受け取った日付データは、まずこの箱に入れて整理整頓します。COBOLでは、この箱の形を「PIC句(ピクチャー句)」という特殊な指定で細かく決めます。例えば、8桁の数字が入る箱を用意して、そこに「20260715」というような形で日付データを格納するのです。
3. COBOLでの現在時刻の取得方法
COBOLで現在の日付を取得するには、ACCEPT(アクセプト)という命令を使います。これは文字通り「受け取る」という英単語から来ています。コンピュータから「現在の日付を受け取る」ための基本的な命令です。
以下のコードを見てください。ここでは、8桁の日付(西暦、月、日)を取得しています。
IDENTIFICATION DIVISION.
PROGRAM-ID. DATE-GET.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 CURRENT-DATE-VAR PIC 9(8).
PROCEDURE DIVISION.
ACCEPT CURRENT-DATE-VAR FROM DATE YYYYMMDD.
DISPLAY "今日の日付は" CURRENT-DATE-VAR "です。"
STOP RUN.
このプログラムでは、WORKING-STORAGE SECTION(ワーキングストレージセクション)という場所で、数字を8個入れられる「箱(CURRENT-DATE-VAR)」を用意しています。そして、ACCEPT命令でコンピュータから日付をその箱に流し込み、DISPLAY命令で画面に出力しています。DISPLAYは「表示する」という意味の命令です。これだけで、簡単に日付を取得し、確認することができます。
4. なぜローカライズが必要なのか
先ほどのプログラムで取得した「20260715」という表示は、コンピュータにとっては正解ですが、人間にとっては少し味気ないですよね。読み間違いを防ぐためにも、これを「2026年07月15日」といった形式に変換する必要があります。これがローカライズの第一歩です。ビジネスの現場では、帳票や請求書など、多くの書類を扱います。これらの書類において日付の形式が統一されていないと、取引先から不信感を持たれたり、経理上のトラブルの原因になったりします。
COBOLは、もともと「事務処理」のために開発された言語です。そのため、数字の桁数や小数点の位置を厳密に管理する機能が非常に優れています。この「厳密さ」こそが、日付のローカライズを行う上で強力な武器となります。初心者の方も、最初は少し難しく感じるかもしれませんが、要は「数字を切り貼りして、見やすく加工する」作業だと覚えておいてください。
5. データ型とPIC句の基本
COBOLで日付を扱う上で避けて通れないのが「PIC句」です。これは、プログラムの中で使うデータの形を定義するための宣言です。例えば、PIC 9(4)と書けば、「数字が4つ入る場所」という意味になります。
日付をローカライズするときは、このPIC句を工夫して、年・月・日をバラバラに分解し、間に「年」「月」「日」という文字を挟み込むような処理を行います。これは、大きな段ボール箱(日付のデータ)から、中身をひとつずつ取り出し、別の小さな箱(年、月、日のそれぞれの領域)に移し替える作業に例えられます。この「移し替え」をスムーズに行うことが、ローカライズ成功の鍵となります。
6. 日付を文字列として加工する技法
次に、取得した日付を年、月、日に分解して表示する実践的なプログラムを見てみましょう。ここでは、文字列を操作するためのSTRING(ストリング)命令を使います。これは、バラバラの文字や数字を「連結する(つなげる)」ための命令です。
WORKING-STORAGE SECTION.
01 DATE-DATA.
05 YYYY PIC 9(4) VALUE 2026.
05 MM PIC 9(2) VALUE 07.
05 DD PIC 9(2) VALUE 15.
01 JAPAN-DATE PIC X(20).
PROCEDURE DIVISION.
STRING YYYY "年" MM "月" DD "日" INTO JAPAN-DATE.
DISPLAY "本日は" JAPAN-DATE "です。"
STOP RUN.
このコードでは、年、月、日をそれぞれ独立した「箱」として定義しています。そしてSTRING命令を使って、それらの間に「年」「月」「日」という文字を流し込み、ひとつの長い文字列(JAPAN-DATE)としてまとめています。こうすることで、2026年07月15日という、人間にとって非常にわかりやすい形式で出力されるようになります。PIC X(20)は、文字を20文字分入れられる箱という意味です。このように、数字と文字を組み合わせることで、どんな形式にも変換できるのがCOBOLの面白いところです。
7. 実際にプログラムを書いてみよう
最後に、少し応用として、現在時刻も取得して、日付と時刻をセットで表示するプログラムを紹介します。時刻の取得もACCEPT命令で行いますが、指定するキーワードが異なります。プログラムを組むときには、こうした「命令の種類」を覚えることが近道です。
WORKING-STORAGE SECTION.
01 TODAY-DATE PIC 9(8).
01 NOW-TIME PIC 9(6).
PROCEDURE DIVISION.
ACCEPT TODAY-DATE FROM DATE YYYYMMDD.
ACCEPT NOW-TIME FROM TIME.
DISPLAY "現在の日付: " TODAY-DATE.
DISPLAY "現在の時刻: " NOW-TIME.
STOP RUN.
このプログラムを実行すると、以下のように出力されます。
現在の日付: 20260715
現在の時刻: 122803
時刻は「時時分分秒秒」の順で取得されます。もし「時:分:秒」のようにしたい場合も、先ほど紹介したSTRING命令や、数値の編集機能を使えば簡単に実現可能です。プログラムは、最初から完璧に書こうとする必要はありません。まずは動くものを作ってみて、そこから少しずつ見た目を整えていく、というのが初心者が最短で上達するコツです。COBOLは非常に歴史が長い言語ですので、世界中に多くの情報が転がっています。ぜひ、この基本を足がかりに、さらに複雑な日付処理にも挑戦してみてください。