UTC (Coordinated Universal Time) 形式で、現在の日付と時刻を含みます。
Synopsis
$ZTIMESTAMP
$ZTS
概要
$ZTIMESTAMP には、現在の日付と時刻が UTC (Coordinated Universal Time) 値として含まれます。UTC は、時刻と日付の世界標準です。この値は、ローカル時刻 (および日付) の値と異なる場合がほとんどです。
$ZTIMESTAMP は、日付と時刻を次の形式の文字列として表します。
ddddd,ttttt.fff
ddddd は、1840 年 12 月 31 日からの経過日数を示す整数です。ttttt は、現在の日付の午前 0 時からの経過秒数を示す整数です。fff は、秒の小数部を示す可変桁数です。この形式は $HOROLOG と似ていますが、$HOROLOG には秒の小数部は含まれません。
現在の日付と時間 (UTC) が以下のようになると仮定します。
2004-07-23 15:17:27.984
そのとき、$ZTIMESTAMP は以下の値を持ちます。
59739,55047.984
$ZTIMESTAMP は、タイム・ゾーンとは独立した UTC (Coordinated Universal Time) を報告します (UTC は GMT (グリニッジ標準時間) の別名です)。そのため、ローカル時間帯に関係なく、一様に時間を記録するタイムスタンプとして $ZTIMESTAMP を使用することができます。これは、ローカル時刻値とローカル日付値の両方と異なる場合があります。
$ZTIMESTAMP の時刻値は、秒数とその小数部で時刻をカウントする 10 進数値です。1 秒以下の桁数は、0 から 9 桁で、コンピュータの時刻クロックの精度によって決定します。Windows システムでは、小数部分の精度は 3 桁で、UNIX システムでは 6 桁です。$ZTIMESTAMP は末尾の 0 や、この小数部での末尾の小数点を抑制します。
現在の日付と時刻は、さまざまな方法で返すことができますが、その違いを以下に示します。
Note:
ローカル時刻と UTC 時刻を比較する際には注意が必要です。
この特殊変数は、SET コマンドを使用して変更することはできません。変更を試みると、<SYNTAX> エラーが返されます。
Note:
$ZTIMESTAMP は、バージョン 7.0 以前の OpenVMS システムでは使用できません。VMS 6.0 シリーズ・システムで $ZTIMESTAMP を呼び出すと、<UNIMPLEMENTED> エラーが返されます。
協定世界時の変換
次の例のように、tformat 値 7 または 8 を指定して $ZDATETIME および $ZDATETIMEH 関数を使用することで、ローカル時刻情報を UTC として表すことができます。
   WRITE !,$ZDATETIME($ZTIMESTAMP,1,1,2)
   WRITE !,$ZDATETIME($HOROLOG,1,7,2)
   WRITE !,$ZDATETIME($HOROLOG,1,8,2)
   WRITE !,$ZDATETIME($ZUTIL(188),1,7,2)
   WRITE !,$ZDATETIME($ZUTIL(188),1,8,2)

上記の $ZDATETIME 関数はすべて、現在の時刻をローカル時刻ではなく UTC として返します。ローカル時刻からの変換では、ローカル時刻調整に合わせて、日付の調整が適宜行われます。ただし、$ZTIMESTAMP の表示値と、tformat 値 7 または 8 で変換された表示値は同一ではありません。tformat 値 7 および 8 によって、時刻値の前に文字 “T”、後に文字 “Z” が挿入されます。また、$HOROLOG 時刻には 1 秒以下の秒数が含まれないので、上の例の precision 2 によって小数部にゼロが埋め込まれます。
以下の構文のいずれかを使用してシステム・メソッドを呼び出すことで、$ZTIMESTAMP と同じタイム・スタンプ情報を取得することができます。
   WRITE !,$SYSTEM.SYS.TimeStamp()
   WRITE !,##class(%SYSTEM.SYS).TimeStamp()
詳細は、"$SYSTEM" 特殊変数と、"Caché クラス・リファレンス" の "クラス %SYSTEM.SYS" セクションを参照してください。
以下の例は、$ZTIMESTAMP の値をローカル時刻に変換し、それを $ZUTIL(188)$HOROLOG の 2 つのローカル時刻表現と比較します。
   SET stamp=$ZTIMESTAMP,clock=$HOROLOG,miliclock=$ZUTIL(188)
   WRITE !,"local date and time: ",$ZDATETIME(clock,1,1,2)
   WRITE !,"local date and time: ",$ZDATETIME(miliclock,1,1,2)
   WRITE !,"UTC date and time:   ",$ZDATETIME(stamp,1,1,2)
   IF $PIECE(stamp,",",2) = $PIECE(clock,",",2) {
      WRITE !,"Local time is UTC time" }
   ELSEIF $PIECE(stamp,",") '= $PIECE(clock,",") {
     WRITE !,"Time difference affects date" }
   ELSE {
         SET localutc=$ZUTIL(193,stamp)
         WRITE !,"Converted local date and time: ",$ZDATETIME(localutc,1,1,2)
   }
   QUIT
次の例は、$ZTIMESTAMP$HOROLOG によって返される値を比較し、$ZTIMESTAMP の時刻部分がどのように変換されるかを示します (この簡単な例では、サマータイムなどのローカル時刻調整に合わせて 1 つの調整のみが行われます。その他のタイプのローカル時刻調整では、clocksecs および stampsecs に矛盾する値が含まれることがあります)。
   SET stamp=$ZTIMESTAMP,clock=$HOROLOG
   WRITE !,"local date and time: ",$ZDATETIME(clock,1,1,2)
   WRITE !,"UTC date and time:   ",$ZDATETIME(stamp,1,1,2)
   IF $PIECE(stamp,",") '= $PIECE(clock,",") {
     WRITE !,"Time difference affects date" }
   SET clocksecs=$EXTRACT(clock,7,11)
   SET stampsecs=$EXTRACT(stamp,7,11)-($ZTIMEZONE*60)
   IF clocksecs=stampsecs {
      WRITE !,"No local time variant" 
      WRITE !,"Local time is timezone time" }
   ELSE {
         SET stampsecs=stampsecs+3600
         IF clocksecs=stampsecs {
           WRITE !,"Daylight Savings Time variant:"
           WRITE !,"Local time offset 1 hour from timezone time" }
         ELSE { WRITE !,"Cannot reconcile due to local time variant" }
   }
   QUIT
関連項目