$NOW (ObjectScript)
構文
$NOW(tzmins)
引数
引数 | 説明 |
---|---|
tzmins |
オプション — グリニッジ子午線を基準とした目的のタイム・ゾーン・オフセットを指定する正または負の整数値 (分)。0 は、グリニッジ子午線に相当します。正の整数は、グリニッジの西側のタイム・ゾーンに相当し、負の整数はグリニッジの東側のタイム・ゾーンに相当します。例えば、300 は グリニッジの 5 時間 (300 分) 西側の米国東部標準時に相当します。許可される値の範囲は -1440 ~1440 です。この範囲を超えると、<ILLEGAL VALUE> エラーが発生します。 tzmins を省略すると、$NOW 関数は $ZTIMEZONE 特殊関数の値に基づいてローカルの日付と時刻を返します。$NOW 関数がサポートする $ZTIMEZONE 値の範囲は -1440 ~1440 です。値がこの範囲を超えると、<ILLEGAL VALUE> エラーが発生します。 |
説明
$NOW は以下の値を返すことができます。
-
現在のプロセスのローカルの日付と時刻 (秒の小数部を含む)
-
現在のプロセスの、指定されたタイム・ゾーンのローカルの日付と時刻 (秒の小数部を含む)
$NOW 関数は、コンマで区切られた 2 つの数値から成る文字列を返します。最初の数値は、現在のローカル日付を表す整数です。2 番目は、現在のローカル時刻を表す小数です。これらの値はカウンタで、ユーザが読み取れる日付と時刻ではありません。
$NOW は、InterSystems IRIS ストレージ ($HOROLOG) 形式の日付と時刻 (秒の小数部を含む) を返します。$NOW は現在のローカルの日付と時刻を ddddd,sssss.ffffff という形式で返します。
最初の整数 (ddddd) は 1840 年 12 月 31 日から起算した日数です。1 は 1841 年 1 月 1 日を表します。この日付の整数の最大値は 2980013 です。これは 9999 年 12 月 31 日に相当します。
2 番目の数値 (sssss.ffffff) は、その日の午前 0 時 00 分からの秒数 (および秒の小数部) を表します。InterSystems IRIS は、sssss フィールドを 0 から 86399 秒までインクリメントします。午前 0 時に 86399 に達すると、sssss フィールドは 0 にリセットされ、日付フィールドが 1 つインクリメントされます。午前 0 時から 1 秒以内は、秒数が 0 です。ffffff (例えば、0.123456) と表されることに注意してください。この数値は、値の文字列ソート順に影響を与える ObjectScript のキャノニック形式 (例えば、.123456) ではありません。先頭にプラス記号 (+) を追加して、数値をキャノニック形式に強制的に変換してから、ソート操作を実行できます。
精度の小数桁数 ffffff は 6 から 9 です。末尾のゼロは削除されます。
$NOW 関数は引数値を指定しても、指定しなくても呼び出せます。括弧は必須です。
引数値を指定しないと、$NOW は現在のプロセスの、現在のローカルの日付と時刻を返します。これは、$ZTIMEZONE 特殊変数に設定された値からローカル・タイム・ゾーンを決定します。$ZTIMEZONE を設定すると $NOW の時刻部分が変更され、またこの変更によって $NOW の日付部分も変更されることがあります。
ローカル時刻値 $NOW は、ローカルな時刻に対応しない場合があります。$NOW は $ZTIMEZONE 値を使用してローカル時刻を決定します。$ZTIMEZONE は 1 年を通して連続的で、サマータイム (DST) などのローカル時刻調整には対応していません。
UTC 時刻からのオフセットは、グリニッジ子午線からのタイム・ゾーンのカウントを使用して計算されます。これは、ローカル時刻とローカル・グリニッジ時刻の比較ではありません。グリニッジ標準時 (GMT) とは紛らわしい用語であり、グリニッジのローカル時刻は、冬の間は UTC と同じで、夏の間は、UTC と 1 時間違います。これは、英国夏時間と呼ばれるローカル時刻の変更が適用されるためです。$NOW では、ローカル時刻の変更がすべて無視されます。
また、$NOW はシステム時計と時刻値を再同期するため、$NOW とその他の InterSystems IRIS 時間関数および特殊変数には、若干の差異が生じる場合があります。この差異は 0.05 秒以内ですが、この差異の範囲内で比較した際に、誤解を与える結果が生じる場合があります。例えば、WRITE $NOW(),!,$HOROLOG では以下のような結果が生じます。
61438,38794.002085 61438,38793
この異常は、再同期での 0.05 秒の差異と、$HOROLOG での秒の小数部の切り捨てが重なって生じます。
引数のある $NOW は、tzmins で指定されたタイム・ゾーンに対応する時刻と日付を返します。$ZTIMEZONE の値は無視されます。
日付と時刻の分割
$NOW の日付部分または時刻部分のみを取得するには、区切り文字としてコンマを指定して、$PIECE 関数を使用します。
SET dateval=$PIECE($NOW(),",",1)
SET timeval=$PIECE($NOW(),",",2)
WRITE !,"Date and time: ",$NOW()
WRITE !,"Date only: ",dateval
WRITE !,"Time only: ",timeval
例
以下の例では、現在のローカルの日付と時刻を返す 2 つの方法を示します。
WRITE $ZDATETIME($NOW(),1,1,3)," $NOW() date & time",!
WRITE $ZDATETIME($HOROLOG,1,1,3)," $HOROLOG date & time"
$HOROLOG によって、サマータイムなどのローカル時刻調整が行われます。$NOW ではローカル時刻調整に合わせた調整を行いません。
以下の例は $ZDATE を使用して、$NOW の日付フィールドを日付形式に変換します。
WRITE $ZDATE($PIECE($NOW(),",",1))
04/29/2009 の形式で値を返します。
次の例では、$NOW の時刻部分が 12 時間 (a.m. または p.m.) 表示の時間:分:秒.fffffff 形式の時刻に変換されます。
CLOCKTIME
NEW
SET Time=$PIECE($NOW(),",",2)
SET Sec=Time#60
SET Totmin=Time\60
SET Min=Totmin#60
SET Milhour=Totmin\60
IF Milhour=12 { SET Hour=12,Meridian=" pm" }
ELSEIF Milhour>12 { SET Hour=Milhour-12,Meridian=" pm" }
ELSE { SET Hour=Milhour,Meridian=" am" }
WRITE !,Hour,":",Min,":",Sec,Meridian
QUIT
時間関数の比較
現在の日付と時刻は、さまざまな方法で返すことができますが、その違いを以下に示します。
-
$NOW は、現在のプロセスのローカルな日付と時刻を返します。$NOW は、日付と時刻を InterSystems IRIS ストレージ形式で返します。秒の小数部は含まれます。
-
$NOW は、$ZTIMEZONE 特殊変数の値からローカル・タイム・ゾーンを決定します。ローカル時刻は、サマータイムなどのローカル時刻調整に合わせて調整されません。したがって、ローカルな時刻に対応しない場合があります。
-
$NOW(tzmins) は、指定された tzmins タイム・ゾーン引数に対応する時刻と日付を返します。$ZTIMEZONE の値は無視されます。
-
-
$HOROLOG には、ローカル調整された日付と時刻が InterSystems IRIS ストレージ形式で格納されます。ローカル・タイム・ゾーンは、$ZTIMEZONE 特殊変数の現在の値で決まり、サマータイムなどのローカル時刻調整に合わせて調整されます。これは、整数秒のみを返し、小数部分は切り捨てられます。
-
$ZTIMESTAMP には、秒の小数部を含む UTC (協定世界時) の日付と時刻が InterSystems IRIS ストレージ形式で格納されます。
日付の設定
$NOW および $ZTIMESTAMP によって返される値は、%SYSTEM.ProcessOpens in a new tab クラスの FixedDate() メソッドを使用して設定することはできません。
$HOROLOG に含まれる値は、%SYSTEM.ProcessOpens in a new tab クラスの FixedDate()Opens in a new tab メソッドを使用して、現在のプロセスのユーザ指定の日付に設定することができます。
関連項目
-
$ZDATE 関数
-
$ZDATEH 関数
-
$ZDATETIME 関数
-
$ZDATETIMEH 関数
-
$ZTIME 関数
-
$ZTIMEH 関数
-
$HOROLOG 特殊変数
-
$ZTIMESTAMP 特殊変数
-
$ZTIMEZONE 特殊変数