サポートチーム便り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