Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

$NOW (ObjectScript)

現在のプロセスのローカルの日付と時刻を、秒の小数部を含めて返します。

Synopsis

$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 の日付部分も変更されることがあります。

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

時間関数の比較

現在の日付と時刻は、さまざまな方法で返すことができますが、その違いを以下に示します。

  • $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 メソッドを使用して、現在のプロセスのユーザ指定の日付に設定することができます。

関連項目

FeedbackOpens in a new tab