日付を検証し、形式を変換します。
Synopsis
$ZDATE(hdate,dformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt)
$ZD(hdate,dformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt)
パラメータ
hdate 1840 年 12 月 31 日から経過した日数を示す内部日付の形式値。
dformat オプション — 返される日付の形式
monthlist オプション — 入力した月名を含む文字列あるいは変数名
yearopt オプション — 年を 2 桁あるいは 4 桁のどちらで表記するかを指定するコード
startwin オプション — 日付を 2 桁の年で表す必要があるスライディング・ウィンドウの開始を指定する数値
endwin オプション — 日付を 2 桁の年で表す必要があるスライディング・ウィンドウの終了を指定する数値
mindate オプション — 有効な日付範囲の下限
maxdate オプション — 有効な日付範囲の上限
erropt オプション — このパラメータは、hdate 値が無効、あるいは範囲外の場合に生じるエラー・メッセージを制御します。
概要
$ZDATE 関数は、$HOROLOG 形式で指定した日付を、別の日付形式に変換します。$ZDATE によって返される値は、使用するパラメータにより異なります。
単純な $ZDATE 形式
$ZDATE(hdate) は $ZDATE の最も基本的な形式で、指定した hdate に対応する出力可能形式の日付を返します。hdate は、1840 年 12 月 31 日から経過した日数の整数値です。範囲は、0 から 2980013 (12/31/1840 から 12/31/9999) です。
既定では、$ZDATE(hdate) は 2 桁で 1900 年から 1999 年までの年を表します。1900 年より前と 1999 年より後の年は、4 桁で表します。例えば以下のようになります。
   WRITE $ZDATE(21400)
これは、08/04/1899 を表示します。
   WRITE $ZDATE(50000)
これは、11/23/77 を表示します。
   WRITE $ZDATE(60000)
これは、04/10/2005 を表示します。
   WRITE $ZDATE(0)
これは、12/31/1840 を表示します。
$ZDATE と特殊変数 $HOROLOG を比較すると、$HOROLOG は、コンマで区切られた 2 つの整数として、現在のシステム日付と時刻を返します。以下は、$HOROLOG 特殊変数を使用して、現在の日付を変数 x に設定します。
   SET x=$ZDATE($HOROLOG)
日付の既定値のカスタマイズ
既定の日付形式は、ロケールの DateFormat プロパティで設定されます。これは、dformat が省略されたかまたは、–1 に設定されたときに返される日付形式です。各国言語サポート (NLS) 機能を使用して、ロケールの既定値を変更できます。
以下の例では、最初の $ZDATE は、ロケールの既定形式で日付を返します。多くの場合、これは、dformat=1 または、日付をスラッシュで区切る (MM/DD/[YY]YY) アメリカ日付形式となります。最初の NLS 機能は、2 つ目の $ZDATE で示されるように、ロケールの既定値を dformat=4、またはヨーロッパ日付形式 (DD/MM/[YY]YY) に変更します。2 つ目の NSL 機能は、(dformat –1、1、および 4 に影響を与える) 日付区切り文字に対するロケールの既定値を変更します。この例では、日付区切り文字は、ドット (“.”) に設定されています。
   WRITE !,$ZDATE($HOROLOG)
   SET x=$$SetDCFormat^%NLS("DateFormat",4)
   WRITE !,$ZDATE($HOROLOG)
   SET y=$$SetDCFormat^%NLS("DateSeparator",".")
   WRITE !,$ZDATE($HOROLOG)
日付形式のカスタマイズ
$ZDATE(hdate,dformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt) は、dformat で指定される形式、およびその他すべてのパラメータで指定される形式で、日付を返します。
パラメータ
hdate
1840 年 12 月 31 日から経過した日数を示す内部日付の形式値。0 から 2980013 までの整数値です。数値、変数名、式としても指定できます。
dformat
返される日付の形式。有効な値は以下の通りです。
意味
-1 現在のロケールの DateFormat プロパティから、有効な dformat 値を取得します。既定は 1 です。dformat を指定しなければ、これが既定になります。
0 DD Mmm [YY]YY (01 Jul 97 あるいは 27 Mar 2002)
1 MM/DD/[YY]YY (07/01/97 あるいは 03/27/2002)
2 DD Mmm [YY]YY (01 Jul 97 あるいは 27 Mar 2002)
3 YYYY-MM-DD (1997-07-01 あるいは 2002-03-27) - ODBC 形式
4 DD/MM/[YY]YY (01/07/97 あるいは 27/03/2002) - ヨーロッパ形式
5 Mmm D, YYYY (Jul 1, 1997 あるいは Mar 27, 2002)
6 Mmm D YYYY (Jul 1 1997 あるいは Mar 27 2002)
7 Mmm DD [YY]YY (Jul 01 1997 あるいは Mar 27 2002)
8 YYYYMMDD (19970701 あるいは 20020327) - 数値形式
9 Mmmmm D, YYYY (July 1, 1997 あるいは March 27, 2002)
10 W (2) [週の 2 日目]
11 Www (Tue)
12 Wwwwww (Tuesday)
以下を示します。
構文 意味
YYYY YYYY は 4 桁の年です。[YY]YY は、hdate の年がアクティブ・ウィンドウ内で 2 桁の場合は 2 桁、それ以外は 4 桁です。
MM 2 桁の月
D 日付が 10 未満の場合は 1 桁、それ以外は 2 桁の日
DD 2 桁の日
Mmm 現在のロケールの MonthAbbr プロパティから取得した月の省略形。別の月の省略形 (あるいは長さに制限のない名前) は、$ZDATEmonthlist パラメータとして指定したオプションのリストから取得することができます。以下は MonthAbbr の既定値です。
“Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec”
Mmmmm MonthName プロパティが指定する月の正式な名前。以下はその既定値です。
“January February March ... November December”
W 曜日を示す 0 から 6 の数字
(例) Sunday は 0、Monday は 1、Tuesday は 2
Www 現在のロケールの WeekdayAbbr プロパティが指定する曜日の省略形。以下はその既定値です。
“Sun Mon Tue Wed Thu Fri Sat”
Wwwwww 現在のロケールの WeekdayName プロパティが指定する曜日の正式な名前。以下はその既定値です。
“Sunday Monday Tuesday ... Friday Saturday”
monthlist
指定した月名を含む文字列あるいは変数名です。monthlist にある名前は、現在のロケールの MonthAbbr プロパティに指定されている既定の月の省略値を置き換えます。monthlist を使用して、正式な月名や、英語以外の言語の月名、およびその省略名を指定します。
monthlist は、dformat が 0、2、5、6、7、9 の場合にのみ有効です。dformat が 1、3、4、8、10、11、12 の場合、$ZDATEmonthlist を無視します。
monthlist の最初の文字は、区切り文字を指定します (既定の組み込みリストにある Jan の前の空白を参照)。monthlist にある各月の名前または省略名の間に、同じ区切り文字を置く必要があります。この区切り文字は、返される日付の月、日、年の間に表示されます。
monthlist を省略するか、または monthlist 値に -1 を指定すると、$ZDATE は現在のロケールの MonthAbbr プロパティで定義された月の省略名リストを使用します。既定は以下の通りです。
“Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec”
しかし、dformat が 9 の場合、$ZDATE は現在のロケールの MonthName プロパティで定義される正式な名前リストを使用します。 既定は以下の通りです。
“January February March ... November December”
yearopt
dformat 値 0、1、2、4、7 を使用して、年を 2 桁で表示する時間ウィンドウを指定する数値コードです。有効な値は以下の通りです。
意味
-1 現在のロケールの YearOption プロパティから有効な yearopt 値を取得します。この既定値は 0 です。yearopt を指定しない場合、これが既定になります。
0 (%DATE ユーティリティから構築される) プロセス固有のスライディング・ウィンドウ機能が有効になっていないかぎり、20 世紀 (1900 年から 1999 年まで) の日付は 2 桁で表し、それ以外の日付は 4 桁で表します。スライディング・ウィンドウが有効の場合、指定範囲内の日付のみ 2 桁の年で表し、それ以外の日付は 4 桁で表します。
1 20 世紀の日付は 2 桁の年、それ以外は 4 桁で表します。
2 すべての日付を 2 桁の年で表します。
3 startwin と (オプションで) endwin に定義した一時的なスライディング・ウィンドウ範囲内に収まる日付を、2 桁の年で表します。それ以外の日付は 4 桁で表します。yearopt =3 の場合、startwinendwin は、$HOROLOG 形式の絶対日付です。
4 すべての日付を 4 桁の年で表します。
5 startwin と (オプションで) endwin に定義した一時的なスライディング・ウィンドウ範囲内に収まる日付を、2 桁の年で表します。それ以外の日付は 4 桁で表します。yearopt が 5 の場合、startwin と endwin は相対年になります。
6 2 桁の年で現在の世紀にあるすべての日付を表します。 それ以外は 4 桁の年で表します。
startwin
日付を 2 桁の年で表す必要があるスライディング・ウィンドウの最初を指定する数値です。詳細は、パラメータのセクションを参照してください。yearopt が 3 または 5 のとき、startwin を指定する必要があります。startwin は、その他の yearopt 値では無効になります。
yearopt = 3 のとき、startwin はスライディング・ウィンドウの最初の日付を示す $HOROLOG 形式の絶対日付です。
yearopt = 5 の場合、startwin は、現在以前の年数として表される、スライディング・ウィンドウの最初の年を示す数値です。スライディング・ウィンドウは常に、startwin. で指定した年の 1 月 1 日から開始します。
endwin
日付を 2 桁の年で表すスライディング・ウィンドウの最後を指定する数値です。yearopt が 3 あるいは 5 のとき、endwin を指定する必要があります。endwin は、その他の yearopt 値では無効になります。
yearopt =3 のとき、endwin はスライディング・ウィンドウの最後日付を示す $HOROLOG 形式の絶対日付です。
yearopt = 5 のとき、endwin は、現在の年から後の年数を示すスライディング・ウィンドウの最後の年を示す数値です。スライディング・ウィンドウは常に、endwin で指定した年の 12 月 31 日で終了します。endwin を指定しない場合、既定は、startwin 以降 100 年後の 12 月 31 日です。
endwin を省略、あるいは -1 を指定した場合、スライディング・ウィンドウの有効期限は 100 年間です。
startwinendwin の両方を指定する場合、指定するスライディング・ウィンドウの年数は 100 年以内に収める必要があります。
mindate
有効な日付の下限を指定する数値です。mindate を省略、あるいは -1 を指定すると、現在のロケールの DateMinimum プロパティから下限を取得します。 既定は 0 (1840 年 12 月 31 日) です。
maxdate
有効な日付の上限を指定する数値です。省略するか、または -1 を指定すると、この上限は、現在のロケールの DateMaximum プロパティから取得されます。既定は、$HOROLOG の日付部分で許容される最大値である、2980013 (9999 年 12 月 31 日) です。maxdate を超える値を指定しようとすると、<VALUE OUT OF RANGE> エラー・メッセージが発生します。
erropt
このパラメータは、hdate が無効あるいは範囲外の場合に生じるエラー・メッセージを制御します。<ILLEGAL VALUE> あるいは <VALUE OUT OF RANGE> エラー・メッセージを生成する代わりに、関数は erropt を返します。
以下のコードは、既定の形式 MM/DD/YY で日付を返します。
   WRITE $HOROLOG
これは、58890,42347 を返します。
   WRITE $ZDATE($HOROLOG)
これは、03/27/2002 を返します。
以下のコマンドは、異なる形式で日付を返します。
   WRITE $ZDATE($HOROLOG,2)
これは、27 Mar 2002 を返します。
日付形式の例
以下の例は、$ZDATE が返すさまざまな dformat 形式を示しています。
   WRITE $ZDATE(26240,1)
これは、11/04/12 を返します。
   WRITE $ZDATE(26240,2)
これは、04 Nov 12 を返します。
   WRITE $ZDATE(26240,3)
これは、1912-11-04 を返します。
   WRITE $ZDATE(26240,4)
これは、04/11/12 を返します。
   WRITE $ZDATE(26240,5)
これは、Nov 4, 1912 を返します。
   WRITE $ZDATE(26240,6)
これは、Nov 4 1912 を返します。
   WRITE $ZDATE(26240,7)
これは、Nov 04 12 を返します。
   WRITE $ZDATE(26240,8)
これは、19121104 を返します。
   WRITE $ZDATE(26240,9)
これは、November 4, 1912 を返します。
   WRITE $ZDATE(26240,10)
これは、1 を返します。
   WRITE $ZDATE(26240,11)
これは、Mon を返します。
   WRITE $ZDATE(26240,12)
これは、Monday を返します。
2 桁の年のスライディング・ウィンドウの例
明示的なスライディング・ウィンドウの使用方法を示すために、以下の関数呼び出しを 1997 年に入力したと仮定します。hdate の 59461 は、October 19, 2003 を表します。dformat 1 により、2 桁または 4 桁の年を返すことができ、yearopt 5 は 4 桁のスライディング・ウィンドウを指定します。yearopt 設定に従い、startwin および endwin が、現在の年 (この場合 1997 年) から相対的に、加算および減算によって計算されます。
   WRITE $ZDATE(59461,1,,5,90,10)
2 桁で年を表示するスライディング・ウィンドウは、1/1/1907 から12/31/2006 までの範囲に指定されるため、Caché は 10/19/03 のように日付を表示します。
日付範囲の例
以下の例は、mindatemaxdate の使用方法を示します。日付を $HOROLOG 形式で指定し、1/8/1950 から 4/10/2005 までの日付を示します。
   WRITE $ZDATE(59451,,,,,,40000,60000)
これは、10/09/2003 を表示します。
   WRITE !,$ZDATE(39000,,,,,,40000,60000)
   WRITE !,$ZDATE(62000,,,,,,40000,60000)
10/12/1947 と 10/1/2010 は指定の日付範囲外であるため、上記の行は <VALUE OUT OF RANGE> を返します。
メモ
$ZDATE で無効な値
以下の状況では、<FUNCTION> エラーが発生します。
以下の状況で、<ILLEGAL VALUE> エラーが発生します。
以下の状況では、<VALUE OUT OF RANGE> エラーが発生します。
erropt を使用するエラー処理
Caché は、正の整数に評価される必要がある hdate に対して標準の数値評価を実行します。したがって、7、"7"、+7、0007、7.0、"7 dwarves"、--7 は、すべて同じ日付 01/07/1841 として評価されます。既定では、2980013 より大きい、または 0 より小さい値は <VALUE OUT OF RANGE> エラーを返します。 小数値は <ILLEGAL VALUE> エラーを返します。非数値文字列 (NULL 文字列を含む) は、最初の日付 12/31/1840 を返します。
erropt パラメータが指定されている場合、このパラメータは、無効な値あるいは hdate の範囲外の値が原因で生成されるエラー・メッセージを制御します。他のパラメータの無効な値、あるいは範囲外の値が原因で発生したエラーについては、erropt が指定されているかどうかに関係なく、常にエラー・メッセージが生成されます。
例えば、$ZDATEendwinstartwin より前になるスライディング・ウィンドウを指定すると、常に <ILLEGAL VALUE> エラーが発生します。同様に、maxdatemindate より小さい場合、<LLEGAL VALUE> エラーが発生します。
$ZUTIL(68,32) および $ZUTIL(69,32) を使用するエラー処理
hdate に無効な値が指定された際の $ZDATE の振る舞いは、$ZUTIL(68,32) 関数 と $ZUTIL(69,32) 関数で、あるいは Caché 構成マネージャ のオプションで設定できます。$ZUTIL(68,32) 日付範囲と無効な日付動作の設定 を参照してください。
ユーティリティの代わりに使用する $ZDATE
$ZDATE 関数と日付ユーティリティのいずれかを選択する必要がある場合、以下の点に注意してください。
日付区切り文字
$ZDATE は、dformat が 1 または 4 のとき、年月日の区切り文字として現在のロケールの DateSeparator プロパティの値を使用します。ODBC 日付形式 (dformat=3) の区切り文字は、常に ODBC 基準で要求されている “-” です。DateSeparator の既定値は “/” であり、この区切り文字はすべてのドキュメントで使用されています。
関連項目