日付・時刻の取得や一定時間待ち合わせする
- 日付を取得する
-
現在の年・月・日を取得します。
年を2桁でもらう方法と4桁でもらう方法の2種類があります。
実際にもらえる日付はサーバのシステム日付です。(サーバのコントロールパネルにある「日付と時刻」などで日付を変更すれば、ここで貰える日付も変わる。)
- ◆年月日(年は2桁)を取得できるACCEPT(小入力)命令
-
A−VX COBOL85では昔から使える標準的な命令です。
NEC正式版の説明書「COBOL85言語説明書」−「第3章 中核」−「3.6.5 ACCEPT命令」に書いてあります。
その説明書から概要を下に抜き出します。
一般形式
ACCEPT 一意名 FROM DATE
一意名は6桁の符号なし数字項目と定義されているものとする。
年の下2桁、月、日の順番に構成される。例えば2012年2月14日は120214となる。
現在の年月日を6桁でシステムからもらいます。年は2桁。
ACCEPTでもらえる年が西暦年と和暦年のどちらかは、システム生成で決められています。どちらになっているかはシステム生成の情報を印刷・表示するユーティリティ:#SGLSTで調べることができます。
- ◆年月日(年は4桁)を取得できるシステムサブルーチン
-
かつて2000年問題が話題になっていた頃に新規に用意されたシステムサブルーチンです。なので、その頃より昔のシステムでは使用できません。
NEC正式版の説明書「COBOL85システムサブルーチン説明書」−「第6章 システムインタフェースサブルーチン」−「6.13 西暦2000年対応 日付の取得」に書いてあります。
その説明書から概要を下に抜き出します。
一般形式
CALL "CBLDATE" USING データ名
データ名:西暦日付
データ名は8桁の符号なし数字項目。日付をyyyymmdd形式で格納します。
yyyyは西暦年4桁を表し、mmは月を数字2桁で表わし、ddはその日を表します。
システム生成の状態が和暦の場合、西暦年の値は保証しません。
現在の年月日を8桁でシステムからもらいます。年は4桁。西暦のシステムであることが使用する条件のようです。
システムが西暦のシステムなのか和暦のシステムなのか、どちらになっているかはシステム生成の情報を印刷・表示するユーティリティ:#SGLSTで調べることができます。
もしリンクでエラーになるようであれば、このシステムサブルーチンシステムに登録されていない可能性があるので、「システム導入・変更の手引き」の「付録 「西暦2000年対応 日付の取得」COBOLシステムサブルーチンのSUとCUの登録方法」を見て登録します。
CBLDATESという名前のソースプログラムもあるみたいです。(サンプルプログラム?)
- ◆年(2桁)と通日(1月1日からの日数)を取得できるACCEPT(小入力)命令
-
NEC正式版の説明書「COBOL85言語説明書」−「第3章 中核」−「3.6.5 ACCEPT命令」に書いてあります。
その説明書から概要を下に抜き出します。
一般形式
ACCEPT 一意名 FROM DAY
一意名は6けたの符号なし数字項目として定義されているものとする。
例えば1985年2月14日は85045となる。
現在の年と通日(1月1日からの日数)をシステムからもらうことができます。
年の部分は「年月日(年は2桁)を取得できるACCEPT(小入力)命令」でもらえるものと同じです。
- ◆曜日を取得できるACCEPT(小入力)命令
-
NEC正式版の説明書「COBOL85言語説明書」−「第3章 中核」−「3.6.5 ACCEPT命令」に書いてあります。
その説明書から概要を下に抜き出します。
一般形式
ACCEPT 一意名 FROM DAY-OF-WEEK
一意名は1桁の符号なし数字項目として定義されているものとする。
一意名に入る値は、1は月曜日を示し、2は火曜日を示し、・・・7は日曜日を示す。
曜日 月 火 水 木 金 土 日 値 1 2 3 4 5 6 7
現在の曜日を対応する数字1桁でシステムからもらいます。
- 時刻を取得する
-
NEC正式版の説明書「COBOL85言語説明書」−「第3章 中核」−「3.6.5 ACCEPT命令」に書いてあります。
その説明書から概要を下に抜き出します。
一般形式
ACCEPT 一意名 FROM TIME
一意名は8桁の符号なし数字項目として定義されているものとする。
時(2桁)、分(2桁)、秒(2桁)、100分の1秒(2桁)の順番で構成される。午前零時を起点とする24時間表示とする。このうち、100分の1秒は常に00である。
例えば午後2時41分32秒は、14413200となる。
現在の時刻(時分秒)をシステムからもらうことができます。
実際にもらえる時刻はサーバのシステム時刻です。(サーバのコントロールパネルにある「日付と時刻」などで時刻を変更すれば、ここでもらえる時刻も変わる。)
- 一定時間待ち合わせする
-
NEC正式版の説明書「COBOL85システムサブルーチン説明書」−「第6章 システムインタフェースサブルーチン」−「6.2 インターバルタイマ」に書いてあります。
その説明書から概要を下に抜き出します。
一般形式
CALL "CBLTIMER" USING データ名
データ名:待ち時間
データ名はレベル番号01または77の4桁の符号なし数字項目。
CALL命令を実行すると、プログラムは一定の時間待ちの状態になります。
データ名の値によって待ち時間が決定されます。1/10秒単位で、最高320秒までの時間が設定できます。
例 0.5・・・0005 1秒 ・・・0010 1分 ・・・0600 0あるいは3201以上の値を指定した場合は、何も実行せずに、CALL命令の次の命令に実行が移ります。
サンプルプログラム
-
A−VXのCOBOL85で標準で用意されている日付や時刻に関する命令やシステムサブルーチンを使ったサンプルプログラムを紹介します。
- サンプルプログラム1
-
サンプルプログラム1で使用しているものは次の5種類です。
- 現在年月日(年は2桁)を取得できるACCEPT(小入力)命令
- 現在年月日(年は4桁)を取得できるシステムサブルーチン
- 現在時刻を取得できるACCEPT(小入力)命令
- 年(2桁)と通日(1月1日からの日数)を取得できるACCEPT(小入力)命令
- 曜日を取得できるACCEPT(小入力)命令
000010************************************************************ 000020** 日付・時刻取得 ** 000030** サンプルプログラム1 ** 000040************************************************************ 000050 IDENTIFICATION DIVISION. 000060 PROGRAM-ID. SAM001. 000070* 000080 ENVIRONMENT DIVISION. 000090* 000100 DATA DIVISION. 000110 WORKING-STORAGE SECTION. 000120*--------時刻取得の為のデータ項目--------------------------- 000130 01 GETTIME PIC 9(08). 000140 01 GETTIME-R REDEFINES GETTIME. 000150 05 GTIM PIC 9(02). 000160 05 GMIN PIC 9(02). 000170 05 GSEC PIC 9(02). 000180 05 GMIL PIC 9(02). 000190*--------日付取得の為のデータ項目--------------------------- 000200 01 2NEN PIC 9(06). 000210 01 2NEN-R REDEFINES 2NEN. 000220 05 YEAR-2 PIC 9(02). 000230 05 MONTH-2 PIC 9(02). 000240 05 DATE-2 PIC 9(02). 000250*--------4桁年(西暦2000年対応日付の取得)のデータ項目- 000260 01 4NEN PIC 9(08). 000270 01 4NEN-R REDEFINES 4NEN. 000280 05 YEAR-4 PIC 9(04). 000290 05 MONTH-4 PIC 9(02). 000300 05 DATE-4 PIC 9(02). 000310*-------1月1日からの日数(通日)の為のデータ項目--------- 000320 01 GETDAY PIC 9(05). 000330 01 GETDAY-R REDEFINES GETDAY. 000340 05 GYEAR PIC 9(02). 000350 05 GDAY PIC 9(03). 000360*-------曜日の為のデータ項目------------------------------- 000370 01 DAYOFW PIC 9(01). 000380 01 GR-YOUBI. 000390 05 YY PIC N(07) VALUE NC"月火水木金土日". 000400 05 YOUBI REDEFINES YY PIC X(02) OCCURS 7. 000410*-------キー待ち合わせ用データ項目------------------------- 000420 01 KEYIN PIC X(01). 000430* 000440 PROCEDURE DIVISION. 000450 MPRG. 000460 INITIALIZE GETTIME 2NEN 4NEN GETDAY DAYOFW. 000470*-------現在日付の取得------------------------------------- 000480 ACCEPT 2NEN FROM DATE. 000490*-------4桁年の日付の取得--------------------------------- 000500 CALL "CBLDATE" USING 4NEN. 000510*-------現在時刻の取得------------------------------------- 000520 ACCEPT GETTIME FROM TIME. 000530*-------通日の取得----------------------------------------- 000540 ACCEPT GETDAY FROM DAY. 000550*-------曜日の取得----------------------------------------- 000560 ACCEPT DAYOFW FROM DAY-OF-WEEK. 000570*---------------------------------------------------------- 000580*---------- 画面表示 -------------------------------------- 000590*---------------------------------------------------------- 000600 DISPLAY "現在日付: " YEAR-2 "年" MONTH-2 "月" DATE-2 "日". 000610 DISPLAY "4桁年 :" YEAR-4 "年" MONTH-4 "月" DATE-4 "日". 000620 DISPLAY "現在時刻: " GTIM "時" GMIN "分" GSEC "秒" GMIL. 000630 DISPLAY "通日 : " GYEAR "年" GDAY "日". 000640 DISPLAY "曜日 : " YOUBI(DAYOFW). 000650*--------------------------------------------------------------- 000660 DISPLAY "やめる時はエンターキーを押して". 000670 ACCEPT KEYIN. 000680 STOP RUN.
西暦表示のシステムでサンプルプログラム1を実行した例
- サンプルプログラム2
-
サンプルプログラム2で使用しているものは次の4種類です。
- 現在時刻を取得できるACCEPT(小入力)命令
- 現在年月日(年は2桁)を取得できるACCEPT(小入力)命令
- 現在年月日(年は4桁)を取得できるシステムサブルーチン
- 一定時間待ち合わせを行うシステムサブルーチン
最初に日付(年は2桁)と時刻を画面表示し、5分待ち合わせ、待ち合わせが終わったらもう一度日付(4桁)と時刻を画面表示します。
000010*********************************************************** 000020** インタバルタイマーと日付・時刻取得 ** 000030** サンプルプログラム2 ** 000040*********************************************************** 000050 IDENTIFICATION DIVISION. 000060 PROGRAM-ID. SAM002. 000070* 000080 ENVIRONMENT DIVISION. 000090* 000100 DATA DIVISION. 000110 WORKING-STORAGE SECTION. 000120*--------時刻取得の為のデータ項目-------------------- 000130 01 GETTIME. 000140 05 GTIM PIC 9(02). 000150 05 GMIN PIC 9(02). 000160 05 GSEC PIC 9(02). 000170 05 GMIL PIC 9(02). 000180 01 GETTIME-R REDEFINES GETTIME PIC 9(08). 000190*--------日付の取得のためのデータ項目---------------- 000200 01 2NEN. 000210 05 YEAR-2 PIC 9(02). 000220 05 MONTH-2 PIC 9(02). 000230 05 DATE-2 PIC 9(02). 000240 01 2NEN-R REDEFINES 2NEN PIC 9(06). 000250*--------インターバルタイマーのデータ項目------------ 000260 01 INTTMR. 000270 05 SEC PIC 9(03). 000280 05 FILLER PIC 9(01) VALUE ZERO. 000290 01 INTTMR-R REDEFINES INTTMR PIC 9(04). 000300*--------4桁年(西暦2000年対応日付の取得)のデータ項目 000310 01 4NEN. 000320 05 YEAR-4 PIC 9(04). 000330 05 MONTH-4 PIC 9(02). 000340 05 DATE-4 PIC 9(02). 000350 01 4NEN-R REDEFINES 4NEN PIC 9(08). 000360*--------キー待ち合わせ用データ項目------------------ 000370 01 KEYIN PIC X(01). 000380* 000390 PROCEDURE DIVISION. 000400 MPRG. 000410 DISPLAY "5分ぐらい待ち合わせます。". 000420*----------------------------------------------------- 000430*--------現在時刻の取得------------------------------- 000440 INITIALIZE GETTIME-R 000450 ACCEPT GETTIME-R FROM TIME. 000460*----------------------------------------------------- 000470*--------現在日付の取得------------------------------- 000480 INITIALIZE 2NEN-R 000490 ACCEPT 2NEN-R FROM DATE. 000500*----------------------------------------------------- 000510*--------開始日時の表示------------------------------- 000520 DISPLAY "開始時刻: " YEAR-2 "." MONTH-2 "." DATE-2 000530 " " GTIM ":" GMIN ":" GSEC. 000540*----------------------------------------------------- 000550*------- インターバルタイマーの処理 ------------------ 000560* 待ち時間をセット(300秒=5分) 000570* セットできるのは1〜320秒まで 000580 MOVE 300 TO SEC 000590* 待ち合わせ実施 000600 CALL "CBLTIMER" USING INTTMR-R. 000610*----------------------------------------------------- 000620*--------4桁年の日付の取得の処理--------------------- 000630 INITIALIZE 4NEN 000640 CALL "CBLDATE" USING 4NEN-R. 000650*----------------------------------------------------- 000660*--------終わり日時の表示----------------------------- 000670 INITIALIZE GETTIME-R 000680 ACCEPT GETTIME-R FROM TIME. 000690 DISPLAY "終了時刻:" YEAR-4 "." MONTH-4 "." DATE-4 000700 " " GTIM ":" GMIN ":" GSEC. 000710 DISPLAY "待ち合わせ終了。やめる時はエンターキー押して" 000720 ACCEPT KEYIN. 000730 STOP RUN.
西暦表示のシステムでサンプルプログラム2を実行した例
和暦表示のシステムでサンプルプログラム2を実行した例
NECの正式版説明書の注意事項によると和暦表示のシステムの場合は4桁の方は値の保証はしていないとのこと。(今回の例では和暦でもらえている点に注意。)