UTC (Coordinated Universal Time) 形式で、現在の日付と時刻を含みます。
Synopsis
$ZTIMESTAMP には、現在の日付と時刻が UTC (Coordinated Universal Time) 値として含まれます。UTC は、時刻と日付の世界標準です。この値は、ローカル時刻 (および日付) の値と異なる場合がほとんどです。
現在の日付と時間 (UTC) が以下のようになると仮定します。
$ZTIMESTAMP は、タイム・ゾーンとは独立した UTC (Coordinated Universal Time) を報告します (UTC は GMT (グリニッジ標準時間) の別名です)。そのため、ローカル時間帯に関係なく、一様に時間を記録するタイムスタンプとして
$ZTIMESTAMP を使用することができます。これは、ローカル時刻値とローカル日付値の両方と異なる場合があります。
$ZTIMESTAMP の時刻値は、秒数とその小数部で時刻をカウントする 10 進数値です。1 秒以下の桁数は、0 から 9 桁で、コンピュータの時刻クロックの精度によって決定します。Windows システムでは、小数部分の精度は 3 桁で、UNIX システムでは 6 桁です。
$ZTIMESTAMP は末尾の 0 や、この小数部での末尾の小数点を抑制します。
現在の日付と時刻は、さまざまな方法で返すことができますが、その違いを以下に示します。
-
$ZTIMESTAMP には、秒の小数部を含む UTC (グリニッジ標準) の日付と時刻が Caché ストレージ (
$HOROLOG) 形式で格納されます。秒の小数部は、Windows システムでは 3 桁で、UNIX システムでは 6 桁で表されます。
-
$HOROLOG には、ローカル調整された日付と時刻が Caché ストレージ形式で格納されます。秒の小数部は格納されません。
$HOROLOG による秒の小数部の変換方法は、オペレーティング・システム・プラットフォームによって異なります。Windows では、小数部が整数秒に切り上げられます。UNIX では、小数部が切り捨てられます。
-
Note:
ローカル時刻と UTC 時刻を比較する際には注意が必要です。
-
UTC 時刻をローカル時刻に変換する優先的な方法は、
$ZUTIL(193) 関数を使用してローカル・タイム・ゾーンのオフセットを分単位で提供することです。この関数によって、ローカル時刻調整が調整されます。
-
$ZTIMEZONE * 60 の値を加算または減算するだけで、ローカル時刻と UTC 時刻を相互変換することはできません。これは、多くの場合にローカル時刻がローカル時刻調整 (季節によってローカル時刻を 1 時間調整するサマータイムなど) に合わせて調整されるためです。このようなローカル時刻調整は、
$ZTIMEZONE には反映されません。
-
UTC からのタイムゾーン・オフセットとローカル時刻調整 (季節によるサマータイムへの移行など) の両方が、日付と時刻に影響します。ローカル時刻から UTC 時刻への変換 (またはその逆の変換) を行うと、日付と時刻の両方が変更される場合があります。
この特殊変数は、
SET コマンドを使用して変更することはできません。変更を試みると、<SYNTAX> エラーが返されます。
Note:
$ZTIMESTAMP は、バージョン 7.0 以前の OpenVMS システムでは使用できません。VMS 6.0 シリーズ・システムで
$ZTIMESTAMP を呼び出すと、<UNIMPLEMENTED> エラーが返されます。
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()
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
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