CEESECS は、タイム・スタンプを表すストリングをリリアン秒 (1582 年 10 月 14 日の 00:00:00 から数えた秒数) に変換します。 このサービスを使用すると、2 つのタイム・スタンプ間の経過時間を計算するなどの時間演算が容易になります。
| CALL CEESECS の構文 |
|---|
|
文字ストリングに含められる文字数は 5 から 80 ピクチャー文字です。input_timestamp には、先行または末尾ブランクを含めることができます。構文解析は、最初の非ブランク文字から始まります (ピクチャー・ストリング自体に先行ブランクが含まれる場合は、CEESECS がその位置を正確にスキップした後、構文解析が始まります)。
picture_string で指定された日付形式によって判別される有効な日付を解析したら、CEESECS は残りの文字をすべて無視します。有効な日付範囲は、1582 年 10 月 15 日から 9999 年 12 月 31 日です。完全な日付を指定する必要があります。有効な時刻範囲は 00:00:00.000 から 23:59:59.999 です。
時刻値の一部または全部を省略すると、残りの値には 0 が代入されます。以下に、その例を示します。
1992-05-17-19:02 is equivalent to 1992-05-17-19:02:00 1992-05-17 is equivalent to 1992-05-17-00:00:00
picture_string 内の各文字は、input_timestamp 内の文字を表します。例えば、MMDDYY HH.MI.SS を picture_string として指定すると、CEESECS は input_char_date の値 060288 15.35.02 を 1988 年 6 月 2 日の 3:35:02 PM として読み取ります。スラッシュ (/) などの区切り文字がピクチャー・ストリング内にある場合は、先行ゼロを省略することができます。例えば、次に示す CEESECS への呼び出しはすべて、同じ値をデータ項目 secs に割り当てます。
CALL CEESECS USING '92/06/03 15.35.03',
'YY/MM/DD HH.MI.SS', secs, fc.
CALL CEESECS USING '92/6/3 15.35.03',
'YY/MM/DD HH.MI.SS', secs, fc.
CALL CEESECS USING '92/6/3 3.35.03 PM',
'YY/MM/DD HH.MI.SS AP', secs, fc.
CALL CEESECS USING '92.155 3.35.03 pm',
'YY.DDD HH.MI.SS AP', secs, fc.
表現される最大値は 9999 年 12 月 31 日の 23:59:59.999 です。これは、リリアン形式では秒数 265,621,679,999.999 に相当します。
64 ビット長の浮動小数点値は、精度を失うことなく約 16 桁の有効小数桁数を正確に表現することができます。このため、最も近いミリ秒 (15 桁の小数桁数) を正確に使用することができます。
input_timestamp に有効な日付またはタイム・スタンプが含まれていない場合は、output_seconds が 0 に設定され、CEESECS が終了して非 CEE000 シンボリック・フィードバック・コードが戻されます。
output_seconds は経過時間を表すので、経過時間の計算を容易に行うことができます。うるう年や年末偏差は計算に影響しません。
| シンボリック・フィードバック・コード | 重大度 | メッセージ番号 | メッセージ・テキスト |
|---|---|---|---|
| CEE000 | 0 | — | サービスが正しく完了した。 |
| CEE2EB | 3 | 2507 | CEEDAYS または CEESECS に渡されたデータが不十分です。リリアン日付の値は計算されませんでした。 |
| CEE2EC | 3 | 2508 | CEEDAYS または CEESECS に渡された日付値が無効です。 |
| CEE2ED | 3 | 2509 | CEEDAYS または CEESECS に渡された元号が認識されませんでした。 |
| CEE2EE | 3 | 2510 | CEEISEC または CEESECS への呼び出しで時間の値が認識されませんでした。 |
| CEE2EH | 3 | 2513 | CEEISEC、CEEDAYS、CEESECS のいずれかの呼び出しで渡された入力日付が、対応範囲内にありませんでした。 |
| CEE2EK | 3 | 2516 | CEEISEC 呼び出し内の分の値が認識されませんでした。 |
| CEE2EL | 3 | 2517 | CEEISEC 呼び出し内の月の値が認識されませんでした。 |
| CEE2EM | 3 | 2518 | 日時サービスへの呼び出しに無効なピクチャー・ストリングが指定されました。 |
| CEE2EN | 3 | 2519 | CEEISEC 呼び出し内の秒の値が認識されませんでした。 |
| CEE2EP | 3 | 2521 | CEEDAYS または CEESECS に渡された <JJJJ>、 <CCCC>、または <CCCCCCCC> の元号年数値がゼロでした。 |
| CEE2ET | 3 | 2525 | CEESECS が数値フィールド内に非数値データを検出したか、あるいはタイム・スタンプ・ストリングとピクチャー・ストリングが一致しませんでした。 |
使用上の注意
CBL LIB
************************************************
** **
** Function: Call CEESECS to convert **
** timestamp to number of seconds **
** **
** In this example, calls are made to CEESECS **
** to convert two timestamps to the number of **
** seconds since 00:00:00 14 October 1582. **
** The Lilian seconds for the earlier **
** timestamp are then subtracted from the **
** Lilian seconds for the later timestamp **
** to determine the number of between the **
** two. This result is displayed. **
** **
************************************************
IDENTIFICATION DIVISION.
PROGRAM-ID. CBLSECS.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 SECOND1 COMP-2.
01 SECOND2 COMP-2.
01 TIMESTP.
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 TIMESTP.
01 TIMESTP2.
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 TIMESTP2.
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 FC.
02 Condition-Token-Value.
COPY CEEIGZCT.
03 Case-1-Condition-ID.
04 Severity PIC S9(4) COMP.
04 Msg-No PIC S9(4) COMP.
03 Case-2-Condition-ID
REDEFINES Case-1-Condition-ID.
04 Class-Code PIC S9(4) COMP.
04 Cause-Code PIC S9(4) COMP.
03 Case-Sev-Ctl PIC X.
03 Facility-ID PIC XXX.
02 I-S-Info PIC S9(9) COMP.
PROCEDURE DIVISION.
PARA-SECS1.
************************************************
** Specify first timestamp and a picture string
** describing the format of the timestamp
** as input to CEESECS
************************************************
MOVE 25 TO Vstring-length of TIMESTP.
MOVE '1969-05-07 12:01:00.000'
TO Vstring-text of TIMESTP.
MOVE 25 TO Vstring-length of PICSTR.
MOVE 'YYYY-MM-DD HH:MI:SS.999'
TO Vstring-text of PICSTR.
************************************************
** Call CEESECS to convert the first timestamp
** to Lilian seconds
************************************************
CALL 'CEESECS' USING TIMESTP, PICSTR,
SECOND1, FC.
IF NOT CEE000 of FC THEN
DISPLAY 'CEESECS failed with msg '
Msg-No of FC UPON CONSOLE
STOP RUN
END-IF.
PARA-SECS2.
************************************************
** Specify second timestamp and a picture string
** describing the format of the timestamp as
** input to CEESECS.
************************************************
MOVE 25 TO Vstring-length of TIMESTP2.
MOVE '2004-01-01 00:00:01.000'
TO Vstring-text of TIMESTP2.
MOVE 25 TO Vstring-length of PICSTR.
MOVE 'YYYY-MM-DD HH:MI:SS.999'
TO Vstring-text of PICSTR.
************************************************
** Call CEESECS to convert the second timestamp
** to Lilian seconds
************************************************
CALL 'CEESECS' USING TIMESTP2, PICSTR,
SECOND2, FC.
IF NOT CEE000 of FC THEN
DISPLAY 'CEESECS failed with msg '
Msg-No of FC UPON CONSOLE
STOP RUN
END-IF.
PARA-SECS2.
************************************************
** Subtract SECOND2 from SECOND1 to determine the
** number of seconds between the two timestamps
************************************************
SUBTRACT SECOND1 FROM SECOND2.
DISPLAY 'The number of seconds between '
Vstring-text OF TIMESTP ' and '
Vstring-text OF TIMESTP2 ' is: ' SECOND2.
GOBACK.
関連参照
ピクチャー文字項およびストリング