Google
オフコン練習帳内を検索
インターネット全体を検索

NECオフコン関連
オフコン一般
情報
トップ  >  日付・時刻取得関係

日付・時刻の取得や一定時間待ち合わせする

日付を取得する

現在の年・月・日を取得します。
年を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は日曜日を示す。

曜日
1234567


現在の曜日を対応する数字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桁の方は値の保証はしていないとのこと。(今回の例では和暦でもらえている点に注意。)