説明
$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 の日付部分も変更されることがあります。
Caution:
ローカル時刻値 $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