サポートチーム便り2010.10.20
オシャレな定様式タイムスタンプを作成する
Question
26 文字のシステム・タイムスタンプ (Z タイプ) を「nn:nn AM/PM, Day name, Month name DD, YYYY」といったような文字列に変換したいと思っています。CEEDATE API を使用しようと思いましたが、入力には時間ではなく、日付だけしか指定できないようです。他に方法はないでしょうか。それともすべて手作業でコーディングしなければならないのでしょうか。
Answer
CEEDATE の考えに非常に近かったですね。それに、あなたの考えで正しいです。CEEDATE は日付しかサポートしていません。しかし、非常に関連性がある CEEDATM API ではタイムスタンプをサポートしています。おっしゃるように日付をフォーマットするような CEEDATE の使い方を教えましょう。
実際には RPG タイムスタンプを秒に変換する CEESECS、秒をオシャレな定様式日付に変換する CEEDATM の 2 つの API が必要になります。以下のコード 1 が示すのは、DSPLY 命令コードを使用して、現在の日時をオシャレにフォーマットしている例です。
H DFTACTGRP(*NO)
D CEEDATM PR opdesc
D input_secs 8f const
D picture 100a varying const
D timestamp 100a varying options (*varsize)
D fc 12a options(*omit)
D CEESECS PR opdesc
D input_ts 100a varying const
D picture 100a varying const
D output_secs 8f
D fc 12a options(*omit)
D myTimestamp s Z inz(*sys)
D mySecs s 8f
D myTimeString s 52a
/free
CEESECS ( %subst(%char(myTimestamp: *iso0):1:17)
: 'YYYYMMDDHHMISS999'
: mySecs
: *omit );
CEEDATM ( mySecs
: 'HH:MI AP Wwwwwwwwwz, Mmmmmmmmmz DD, YYYY'
: myTimeString
: *omit );
dsply myTimeString;
*inlr = *on;
/end-free
