CEEDAYS - 日付からリリアン形式への変換

CEEDAYS は、日付を表すストリングをリリアン形式に変換します。リリアン形式では、日付をグレゴリオ暦の始めからの日数で表します。 CEEDAYS は、指定された input_char_date を、リリアン形 式における第 1 日目 (1582 年 10 月 14 日金曜日) からの日数を表す数に変 換します。

CEEDAYS の逆は CEEDATE であり、output_Lilian_date をリリアン形式から 文字形式に変換します。

プログラムが INTDATE(LILIAN) コンパイラー・オプションでコンパイルされ ていない場合は、CEEDAYS を COBOL の組み込み関数と組み合わせて使用しないでください。組み込み関数を使用し、また INTDATE(ANSI) でコンパイルされている COBOL プログラムには CEECBLDY を使用してください。

1601 年以前の日付を処理するためには、各年に 4000 を追加し、リリアン形 式に変換して計算を行い、結果から 4000 を減算し、変換して文字形式に戻してください。

デフォルトでは、2 桁で表した年は、システム日付の 80 年前に始まる 100 年の範囲内にあります。 したがって、1995 年には、2 桁の年のすべては、1915 年から 2014 年まで (1915 年と 2014 年を含む) の間の日付を表します。このデフォルト範囲を変更するには、呼び出し可能サービス CEESCEN を使用します。
構文図を読む構文図をスキップする
構文

>>-CEEDAYS--(--input_char_date--,--picture_string--,------------>

>--output_Lilian_date--,--fc--)--------------------------------><

input_char_date (入力)
ハーフワード長の接頭部付き文字ストリング (VSTRING) で、picture_string で指定する形式に準拠した形式により、日付またはタイム・スタンプを表します。

文字数は 5 から 255 までとします (5 と 255 を含む)。input_char_date には、先行ブランクまたは後書きブランクを入れることができます。日付の構文解析は、最初の非ブランク文字から始まります。(ただし、ピクチャー・ストリングそのものに先行ブランクがある場合を除きます。この場合には、構文解析を開始する前に、CEEDAYS はこのブランク分だけスキップします。)

有効な日付を picture_string で指定した日付の形式に従って 構文解析した後で、CEEDAYS は残りのすべての文字を無視します。有効な日付の範囲は、1582 年 10 月 15 日から 9999 年 12 月 31 日までです。input_char_date に指定できる有効な ピクチャー文字用語については、表 1 を参照してください。

picture_string (入力)
ハーフワード長の接頭部付き文字ストリング (VSTRING) で、input_char_date に指定した日付の形式を表します。

picture_string 内の各文字は、input_char_date 内の文字に対応します。例えば、MMDDYY を picture_string として指定する場合には、CEEDAYS は input_char_date の 060288 を 1988 年 6 月 2 日として読み取ります。

ピクチャー・ストリングにスラッシュ (/) などの区切り文字がある場合には、先行 ゼロを省略することができます。例えば、CEEDAYS に対する以下の呼び出しは、それぞれ lildate に同じ値の 148155 (1988 年 6 月 2 日) を割り当てます。

CALL CEEDAYS('6/2/88'  , 'MM/DD/YY', lildate, fc);
CALL CEEDAYS('06/02/88', 'MM/DD/YY', lildate, fc);
CALL CEEDAYS('060288'  , 'MMDDYY'  , lildate, fc);
CALL CEEDAYS('88154'   , 'YYDDD'   , lildate, fc);
CALL CEEDAYS('1988154' , 'YYYYDDD' , lildate, fc);

picture_string (HH:MI:SS YY/MM/DD など) にコロンまたはスラッシュなどの文字がある場合、それらの文字はプレー スホルダーとして扱われるか、無視されます。有効なピクチャー文字用語のリストについては 表 1 を、また有効なピクチャー・ストリングの例については 表 2 を参照してください。

picture_string に日本元号 <JJJJ> が入っている場 合には、input_char_date における YY の位置が日本元号 の年に置き換えられます。 例えば、1988 年は日本の昭和 63 年と同じです。表 2 の例も参照してください。 CEEDATE でサポートされている日本の年号のリストについては、表 3 を参照してください。

picture_string に元号記号 <CCCC> または <CCCCCCCC> が含まれている場合、input_char_dateYY の位置は、その元号年に置き換えられます。 表 2 の例も参照してください。

output_Lilian_date (出力)
リリアン日付 (1582 年 10 月 14 日からの日数) を表す 32 ビットの 2 進整数。例えば、1988 年 5 月 16 日の日付番号は 148138 です。

input_char_date に有効な日付が入っていない場合には、output_Lilian_date を 0 に設定し、CEEDAYS は CEE000 以外の 記号フィードバック・コードで終了します。

日付の計算は、整数であるため、output_Lilian_date で容易に実行することができます。うるう年および年の終わりの変則性は計算に影響を及ぼしません。

fc (出力)
このサービスの結果を示す 12 バイトの フィードバック・コード (言語によってはオプション)。このパラメーターを省略する場合は、呼び出し可能サービスの呼び出しを参照して、フィードバック・コードが省略されたことを示すための適切な構文を確認してください。

このサービスの結果、出力される記号条件は以下のとおりです。

コード 重大度 メッセージ番号 メッセージ・テキスト
CEE000 0 サービスが正しく完了した。
CEE2EB 3 2507 不十分なデータが CEEDAYS または CEESECS に渡された。リリアン日付の値が計 算されなかった。
CEE2EC 3 2508 CEEDAYS または CEESECS に渡された日付の値が無効であった。
CEE2ED 3 2509 CEEDAYS または CEESECS に渡された年号が認識されなかった。
CEE2EH 3 2513 入力された日付がサポートの範囲外だった。
CEE2EL 3 2517 月の値が認識されなかった。
CEE2EM 3 2518 正しくないピクチャー・ストリングが指定された。
CEE2EO 3 2520 CEEDAYS が数字フィールドで非数字データを検出したか、日付ストリングがピクチャー・ストリングに適合しなかった。
CEE2EP 3 2521 CEEDAYS または CEESECS に渡された年号の年が 0 であった。

使用上の注意

詳細情報

  1. 以下は、C/C++ によって呼び出される CEEDAYS の例です。
    /*Module/File Name: EDCDAYS   */
    
    #include <leawi.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <ceeedcct.h>
    
    int main(void) {
    
       _FEEDBACK fc;
       _INT4 lil_date1,lil_date2;
       _VSTRING date,date_pic;
    
       /* use CEEDAYS to get the Lilian format */
       strcpy(date.string,"05/14/64");
       date.length = strlen(date.string);
       strcpy(date_pic.string,"MM/DD/YY");
       date_pic.length = strlen(date_pic.string);
    
       CEEDAYS(&date,&date_pic,&lil_date1,&fc);
       if ( _FBCHECK ( fc , CEE000 ) != 0 ) {
          printf("CEEDAYS failed with message number %d¥n",
                 fc.tok_msgno);
          exit(2999);
       }
    
       /* use CEEDAYS to get the Lilian format */
       strcpy(date.string,"August 14, 1966");
       date.length = strlen(date.string);
       strcpy(date_pic.string,"Mmmmmmmmmmmz DD, YYYY");
       date_pic.length = strlen(date_pic.string);
    
       CEEDAYS(&date,&date_pic,&lil_date2,&fc);
       if ( _FBCHECK ( fc , CEE000 ) != 0 ) {
          printf("CEEDAYS failed with message number %d¥n",
                 fc.tok_msgno);
          exit(2999);
       }
    
       /* subtract the two Lilian dates to find out */
       /* difference in days */
       printf("The number of days between"
       " May 14, 1964 and August 14, 1966"
       " is: %d¥n",lil_date2 - lil_date1);
    }
  2. 以下は、COBOL によって呼び出される CEEDAYS の例です。
    CBL LIB,QUOTE
          *Module/File Name: IGZTDAYS
          *******************************************
          **                                       **
          ** Function: CEEDAYS - convert date to   **
          **                     Lilian format     **
          **                                       **
          *******************************************
           IDENTIFICATION DIVISION.
           PROGRAM-ID. CBLDAYS.
           DATA DIVISION.
           WORKING-STORAGE SECTION.
           01  CHRDATE.
               02  Vstring-length      PIC S9(4) BINARY.
               02  Vstring-text.
                   03  Vstring-char    PIC X
                               OCCURS 0 TO 256 TIMES
                               DEPENDING ON Vstring-length
                                   of CHRDATE.
           01  PICSTR.
               02  Vstring-length      PIC S9(4) BINARY.
               02  Vstring-text.
                   03  Vstring-char    PIC X
                               OCCURS 0 TO 256 TIMES
                               DEPENDING ON Vstring-length
                                   of PICSTR.
           01  LILIAN                  PIC S9(9) BINARY.
           01  FC.
               02  Condition-Token-Value.
               COPY  CEEIGZCT.
                   03  Case-1-Condition-ID.
                       04  Severity    PIC S9(4) BINARY.
                       04  Msg-No      PIC S9(4) BINARY.
                   03  Case-2-Condition-ID
                             REDEFINES Case-1-Condition-ID.
                       04  Class-Code  PIC S9(4) BINARY.
                       04  Cause-Code  PIC S9(4) BINARY.
                   03  Case-Sev-Ctl    PIC X.
                   03  Facility-ID     PIC XXX.
               02  I-S-Info            PIC S9(9) BINARY.
    
           PROCEDURE DIVISION.
           PARA-CBLDAYS.
          *************************************************
          ** Specify input date and length               **
          *************************************************
               MOVE 16 TO Vstring-length of CHRDATE.
               MOVE "1 January 2000"
                   TO Vstring-text of CHRDATE.      
          *************************************************
          ** Specify a picture string that describes     **
          ** input date, and the picture string's length.**
          *************************************************
               MOVE 25 TO Vstring-length of PICSTR.
               MOVE "ZD Mmmmmmmmmmmmmmz YYYY"
                       TO Vstring-text of PICSTR.
    
          *************************************************
          ** Call CEEDAYS to convert input date to a     **
          ** Lilian date                                 **
          *************************************************
               CALL "CEEDAYS" USING CHRDATE, PICSTR,
                                    LILIAN, FC.
    
          *************************************************
          ** If CEEDAYS runs successfully, display result**
          *************************************************
               IF  CEE000 of FC  THEN
                   DISPLAY Vstring-text of CHRDATE
                       " is Lilian day: " LILIAN
               ELSE
                   DISPLAY "CEEDAYS failed with msg "
                       Msg-No of FC UPON CONSOLE
                   STOP RUN
               END-IF.
    
               GOBACK.
  3. 以下は、PL/I によって呼び出される CEEDAYS の例です。
    *PROCESS MACRO;
     /*Module/File Name: IBMDAYS                        */
     /***************************************************/
     /**                                               **/
     /** Function     : CEEDAYS - Convert date to      **/
     /**                          Lilian format        **/
     /**                                               **/
     /** This example converts two dates to the Lilian **/
     /** format in order to calculate the number of    **/
     /** days between them.                            **/
     /**                                               **/
     /***************************************************/
    
     PLIDAYS: PROC OPTIONS(MAIN);
    
        %INCLUDE  CEEIBMAW;
        %INCLUDE  CEEIBMCT;
    
        DCL CHRDATE  CHAR(255) VARYING;
        DCL CHRD2    CHAR(255) VARYING;
        DCL PICSTR   CHAR(255) VARYING;
        DCL PICST2   CHAR(255) VARYING;
        DCL LILIAN   REAL FIXED BINARY(31,0);
        DCL LIL2     REAL FIXED BINARY(31,0);
        DCL 01 FC,                     /* Feedback token */
               03 MsgSev    REAL FIXED BINARY(15,0),
               03 MsgNo     REAL FIXED BINARY(15,0),
               03 Flags,
                  05 Case      BIT(2),
                  05 Severity  BIT(3),
                  05 Control   BIT(3),
               03 FacID     CHAR(3),      /* Facility ID */
               03 ISI   /* Instance-Specific Information */
                            REAL FIXED BINARY(31,0);
    
        /* First date to be converted to Lilian format   */
        CHRDATE = '5/7/69';
    
        /* Picture string of first input date            */
        PICSTR = 'ZM/ZD/YY';
    
        /* Call CEEDAYS to convert input date to the     */
        /*    Lilian format                              */
        CALL CEEDAYS ( CHRDATE , PICSTR , LILIAN , FC );
        IF  FBCHECK( FC, CEE000)  THEN  DO;
           PUT SKIP LIST( 'The Lilian date for ' || CHRDATE
              || ' is ' || LILIAN );
           END;
        ELSE  DO;
           DISPLAY( 'CEEDAYS failed with msg '
              || FC.MsgNo );
           STOP;
           END;
    
        /* Second date to be converted to Lilian format  */
        CHRD2 = '1 January 2000';
    
        /* Picture string of second input date           */
        PICST2 = 'ZD Mmmmmmmmmmmmmmz YYYY';
    
        /* Call CEEDAYS to convert input date to the     */
        /*    Lilian format                              */
        CALL CEEDAYS ( CHRD2 , PICST2 , LIL2 , FC );
        IF  FBCHECK( FC, CEE000)  THEN  DO;
           PUT SKIP LIST( 'The Lilian date for ' || CHRD2
              || ' is ' || LIL2 );
           END;
        ELSE  DO;
           DISPLAY( 'CEEDAYS failed with msg '
              || FC.MsgNo );
           STOP;
           END;
    
        /* Subtract the two Lilian dates to find out     */
        /*    the difference in days between the two     */
        /*    input dates                                */
        PUT SKIP LIST( 'The number of days between '
           || CHRDATE || ' and ' || CHRD2 || ' is'
           || LIL2 - LILIAN || '.');
    
     END PLIDAYS;