整数カウンタとしての、現在の日付と時刻を含みます。
Synopsis
$HOROLOG
$H
概要
$HOROLOG は、コンマで区切られた 2 つの整数値から成る文字列を含みます。これらの 2 つの整数は、現在の日付と時刻を表します。これらの整数はカウンタで、外部でユーザが読み込める日付と時刻ではありません。$HOROLOG は、次の形式で現在の日付と時刻を返します。
date,time
最初の整数は、1840 年 12 月 31 日からの経過日数です。つまり、日 1 は 1841 年 1 月 1 日です。Caché は任意の開始ポイントからのカウンタを使用して日付を表すので、2000 年問題の影響は受けません。この日付整数の最大値は 2980013 で、9999 年 12 月 31 に当たります。
2 番目の整数は、その日の午前 0 時 00 分からの秒数を表します。システムは、0 から 86399 秒で時間フィールドをインクリメントします。深夜 12 時に 86399 に到達すると、システムは時間フィールドを 0 にリセットしてから、日付フィールドを 1 つインクリメントします。
$ZTIMEZONE を設定すると、現在のプロセスに対する $HOROLOG の値に影響します。これは、$HOROLOG の時間部分を変更し、またこの変更が $HOROLOG の日付部分を変更します。
$HOROLOG は使用しているローカルのタイム・ゾーンに対して特定で、サブセカントの記録は行いません。サブセカントで UTC (タイム・ゾーン独立) 形式で現在の日付と時刻を取得するには、$ZTIMESTAMP を使用します。
以下のように、システム・メソッドを呼び出すことで、現在の同じ日付と時刻を取得することができます。
   WRITE $SYSTEM.SYS.Horolog()
詳細は、Caché クラス・リファレンス の “Class %SYSTEM.SYS” セクションを参照してください。
日付と時刻の分割
$HOROLOG の日付部分または時刻部分のみを取得するには、区切り文字としてコンマを指定して、$PIECE 関数を使用します。
   SET dateint=$PIECE($HOROLOG,",",1)
   SET timeint=$PIECE($HOROLOG,",",2)
   WRITE !,"Date and time: ",$HOROLOG
   WRITE !,"Date only: ",dateint
   WRITE !,"Time only: ",timeint
$HOROLOG 値の日付部分のみを取得する場合は、次のプログラミング方法を使用することもできます。
   SET dateint=+$HOROLOG
   WRITE !,"Date and time: ",$HOROLOG
   WRITE !,"Date only: ",dateint
プラス記号 (+) によって、$HOROLOG 文字列が数値として解析されます。数値以外の文字 (コンマ) が検出されると、残りの文字列は切り捨てられ、数値部分が返されます。これが、文字列の日付整数部分です。
日付・時刻の変換
$ZDATE 関数を使用して、外部でユーザが読み込める形式に $HOROLOG の日付部分を変換できます。$ZTIME 関数を使用して、外部でユーザが読み込める形式に $HOROLOG の日付部分を変換できます。$ZDATETIME 関数を使用して、日付と時刻の両方を変換できます。
$ZDATEH 関数を使用して、外部でユーザが読み込める形式に $HOROLOG の日付部分を変換できます。$ZTIMEH 関数を使用して、外部でユーザが読み込める形式に $HOROLOG の時刻部分を変換できます。$ZDATETIMEH 関数を使用して、$HOROLOG 値の日付と時刻の両方を変換できます。
日付の設定
$ZUTIL(71) 関数を使用して、$HOROLOG を現在のプロセスに対してユーザ指定の日付に設定することができます。
この特殊変数は、SET コマンドを使用して変更することはできません。変更を試みると、<SYNTAX> エラーが返されます。
1840 年より前の日付
$HOROLOG を使用して、1840 年から 9999 年までの範囲外の日付を直接表すことはできません。ただし、SQL のユリウス日付機能を使用することで、この範囲外の日付を表すことができます。SQL のユリウス日付関数 TO_DATE および TO_CHAR は符号なし整数を使用し、これを紀元前 4711 年 (BCE) からカウントした日付としてフォーマットします。$PIECE 関数を使用すると、次の例のように、$HOROLOG から日付整数を抽出し、これらのユリウス日付関数のいずれかへの入力としてその値を使用することができます。現在の日付を表す $HOROLOG 整数は、大幅に異なるユリウス日付値を示すことに注意してください。例えば、2004 年の $HOROLOG 日付は、紀元前 4548 年のユリウス日付を示します。
  SET x=$PIECE($HOROLOG,",",1)
  &sql(SELECT TO_DATE(:x,'J') INTO :y
       FROM Sample.Person)
  WRITE !,"Julian date= ",y
以下の例は、$HOROLOG の現在の内容を表示します。
   WRITE $HOROLOG
58923,49170 の形式で値を返します。
以下の例は $ZDATE を使用して、$HOROLOG のデータ・フィールドをデータ形式に変換します。
   WRITE $ZDATE($PIECE($HOROLOG,",",1))
04/29/2002 の形式で値を返します。
次の例では、$HOROLOG の時刻部分が 12 時間 (a.m. または p.m.) 表示の時間:分:秒形式の時刻に変換されます。
CLOCKTIME    
  NEW
  SET Time=$PIECE($HOROLOG,",",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
関連項目