整数カウンタとしての、現在の日付と時刻を含みます。
Synopsis
$HOROLOG は、コンマで区切られた 2 つの整数値から成る文字列を含みます。これらの 2 つの整数は、現在の日付と時刻を表します。これらの整数はカウンタで、外部でユーザが読み込める日付と時刻ではありません。
$HOROLOG は、次の形式で現在の日付と時刻を返します。
最初の整数は、1840 年 12 月 31 日からの経過日数です。つまり、日 1 は 1841 年 1 月 1 日です。Caché は任意の開始ポイントからのカウンタを使用して日付を表すので、2000 年問題の影響は受けません。この日付整数の最大値は 2980013 で、9999 年 12 月 31 に当たります。
2 番目の整数は、その日の午前 0 時 00 分からの秒数を表します。システムは、0 から 86399 秒で時間フィールドをインクリメントします。深夜 12 時に 86399 に到達すると、システムは時間フィールドを 0 にリセットしてから、日付フィールドを 1 つインクリメントします。
$HOROLOG は使用しているローカルのタイム・ゾーンに対して特定で、サブセカントの記録は行いません。サブセカントで UTC (タイム・ゾーン独立) 形式で現在の日付と時刻を取得するには、
$ZTIMESTAMP を使用します。
以下のように、システム・メソッドを呼び出すことで、現在の同じ日付と時刻を取得することができます。
WRITE $SYSTEM.SYS.Horolog()
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 文字列が数値として解析されます。数値以外の文字 (コンマ) が検出されると、残りの文字列は切り捨てられ、数値部分が返されます。これが、文字列の日付整数部分です。
この特殊変数は、
SET コマンドを使用して変更することはできません。変更を試みると、<SYNTAX> エラーが返されます。
$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
WRITE $ZDATE($PIECE($HOROLOG,",",1))
次の例では、
$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