日付を検証し、形式を変換します。
Synopsis
$ZDATE(hdate,dformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt)
$ZD(hdate,dformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt)
$ZDATE(
hdate) は
$ZDATE の最も基本的な形式で、指定した
hdate に対応する出力可能形式の日付を返します。
hdate は、1840 年 12 月 31 日から経過した日数の整数値です。範囲は、0 から 2980013 (12/31/1840 から 12/31/9999) です。
既定では、
$ZDATE(
hdate) は 1900 年から 1999 年までの年を 2 桁で表します。1900 年より前と 1999 年より後の年は、4 桁で表します。例えば以下のようになります。
既定の日付形式は、ロケールの 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)
1840 年 12 月 31 日から経過した日数を示す内部日付の形式値。0 から 2980013 までの整数値です。数値、変数名、式としても指定できます。
指定した月名を含む文字列あるいは変数名です。
monthlist にある名前は、現在のロケールの MonthAbbr プロパティに指定されている既定の月の省略値を置き換えます。
monthlist を使用して、正式な月名や、英語以外の言語の月名、およびその省略名を指定します。
monthlist の最初の文字は、区切り文字を指定します (既定の組み込みリストにある Jan の前のスペースを参照)。
monthlist にある各月の名前または省略名の間に、同じ区切り文字を置く必要があります。この区切り文字は、返される日付の月、日、年の間に表示されます。
"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"
しかし、dformat が 9 の場合、
$ZDATE は現在のロケールの MonthName プロパティで定義される正式な名前リストを使用します。既定は以下のとおりです。
"January February March ... November December"
dformat 値 0、1、2、4、7 を使用して、年を 2 桁で表示する時間ウィンドウを指定する数値コードです。有効な値は以下のとおりです。
yearopt = 5 のとき、
startwin は、現在の年より前の年数として表される、スライディング・ウィンドウの最初の年を示す数値です。スライディング・ウィンドウは常に、
startwin で指定した年の 1 月 1 日から開始します。
endwin を省略、あるいは -1 を指定した場合、スライディング・ウィンドウの有効期限は 100 年間です。
startwin と
endwin の両方を指定する場合、指定するスライディング・ウィンドウの年数は 100 年以内に収める必要があります。
有効な日付の下限を指定する数値です。mindate を省略、あるいは -1 を指定すると、現在のロケールの DateMinimum プロパティから下限を取得します。既定は 0 (1840 年 12 月 31 日) です。
有効な日付の上限を指定する数値です。maxdate を省略、あるいは -1 を指定すると、現在のロケールの DateMaximum プロパティから上限を取得します。既定は、
$HOROLOG の日付部分で許容される最大値である、2980013 (9999 年 12 月 31 日) です。
maxdate を超える値を指定しようとすると、<VALUE OUT OF RANGE> エラー・メッセージが発生します。
このパラメータは、
hdate が無効あるいは範囲外の場合に生じるエラー・メッセージを制御します。<ILLEGAL VALUE> あるいは <VALUE OUT OF RANGE> エラー・メッセージを生成する代わりに、関数は
erropt を返します。
これは、November 4, 1912 を返します。
明示的なスライディング・ウィンドウの使用方法を示すために、以下の関数呼び出しを 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 のように日付を表示します。
WRITE $ZDATE(59451,,,,,,40000,60000)
WRITE !,$ZDATE(39000,,,,,,40000,60000)
WRITE !,$ZDATE(62000,,,,,,40000,60000)
10/12/1947 と 10/1/2010 は指定の日付範囲外であるため、上記の行は <VALUE OUT OF RANGE> を返します。
以下の状況では、<FUNCTION> エラーが発生します。
-
無効な
dformat コード (-1 未満もしくは 12 より大きい整数値、0、整数以外の値) を指定したとき
-
以下の状況で、<ILLEGAL VALUE> エラーが発生します。
以下の状況では、<VALUE OUT OF RANGE> エラーが発生します。
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 が指定されているかどうかに関係なく、常にエラー・メッセージが生成されます。
$ZUTIL(68,32) および $ZUTIL(69,32) を使用するエラー処理
システム全体の既定の振る舞いは構成可能です。
[システム管理ポータル] で [構成]→[詳細設定] を選択し、[カテゴリ] プルダウン・リストで [ObjectScript] を選択します。
[NullZDATE] の現在の設定を表示して編集します。既定は
false で、これは
$ZDATE がエラーを返すことを意味します。
$ZDATE 関数と日付ユーティリティのいずれかを選択する必要がある場合、以下の点に注意してください。
-
%DO あるいは
%D ユーティリティにある既存のエントリ・ポイントの代わりに
$ZDATE 関数を使用できます。
-
-
$ZDATE は、
dformat が 1 または 4 のとき、年月日の区切り文字として現在のロケールの DateSeparator プロパティの値を使用します。ODBC 日付形式 (
dformat=3) の区切り文字は常に、ODBC 基準で要求されている "-" になります。DateSeparator の既定値は "/" で、この区切り文字はこのドキュメント全体を通して使用されています。