TIME(現時刻と日付を得る)
MVS,MSP,VOS3:OSの互換性:API,インターネルの違い – TIME
TIMEは現時刻および日付を得るためのAPIマクロである。TIMEは基本的なパラメーターを使用する限りにおいてMVS、MSPおよびVOS3間で互換がある。ただし呼び出し方法(LINKAGE)および日付の形式(DATETYPE)に関するパラメーターはMVSとMSP/VOS3間での互換性はない。
基本的な構文
TIME DEC|BIN|TU MIC|STCK,store addr, ZONE=LT|GMT ERRET=error exit addr
上記で示したパラメーターを使う範囲においては、ERRETパラメーターを除きいずれのOS共に互換である。マクロ命令が展開するSVCインターフェースも同様でロードモジュール・レベルでの互換がある。
ERRETはMVSでは廃止された機能である。ただしマクロのパラメーターとしては有効で、API側で無視されるだけである。
日付の形式の指定
TIMEマクロにおける基本的な日付の形式は 0CYYDDDF の符号付きパック10進数で、1月1日を1としたその年内における通算日付(ジュリアン日付)となる。例えば1月29日は029、2月1日は032となる。また年は西暦年の下2桁が戻される。2000年以降か1999年以前かを区別するため、YYの前に世紀を示す数字が返る。1998年なら0098dddF、2013年なら0113dddFとなる。
ジュリアン日付のままでは外部表記には不向きなので、従来はプログラムで日付形式を変換していたが現在では返答される日付の形式を選択できるようにAPIパラメーターが追加された。しかしこの日付の形式を選択するパラメーターは各社それぞれ独自の仕様で追加したため互換はない。
MVSの場合: TIME DEC,store addr,DATETYPE=YYYYMMDD,LINKAGE=SYSTEM ※DATETYPE指定の場合、日付はGR1ではなくstore addrで 指定した領域の+8バイトの位置にYYYYMMDDの4バイトの 符号無しパック10進数で戻される。 MSPの場合: TIME DEC,DATE=YMD VOS3の場合: TIME DEC,DTYPE=YMD ※MSP/VOS3共に日付はGR1にCYYMMDDFの符号付きパック10進数で戻される。
日付の形式はMVSが選択肢が多いが、YYYYMMDD以外は主に欧米の表記(MMDDYYYYやDDMMYYYYなど)で使われるものでMSPやVOS3のシステムで必要とされることは少ないであろう。MSPとVOS3は日付変換を指定するパラメーター名は異なるが、返答のされ方は同じである。
TODクロック値の変換
システム製品などでは日付や時刻をSTCK命令によるTODクロック値で取得・保管し、表示や印刷の際にYYYYMMDD、HHMMSSの形式に変換することも多い。以前であればTODの値はプログラムで計算して変換する必要があったが、現在ではOSが提供するマクロを使用するのが簡単である。(VOS3では時刻変換マクロは提供されていない)
TODクロック値の変換ロジックの参考資料:18.TOD,TIMERの計算(参照:OS/390アセンブラハンドブック 高尾司著)
MVSの場合: STCKCONV STCKVAL=tod clock addr,CONVVAL=converted clock addr, DATETYPE=YYYYMMDD,TIMETYPE=DEC ※変換後の時刻と日付はCONVVALパラメーターで指定した 16バイトの領域に符号無しパック10進数で戻される。 MSPの場合: TIMECNVT TOCLOCK, CLOCK=DEC,DTYPE=YMD,INDATA=tod clock addr, WORKA=workarea ※日付はGR1にCYYMMDDFの符号付きパック10進数で戻される。 時刻はGR0にHHMMSSTTの符号無しパック10進数で戻される。