Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

$ZDATETIMEH

日付と時刻を検証し、これを表示形式から Caché の内部形式に変換します。

Synopsis

$ZDATETIMEH(datetime,dformat,tformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt,localeopt)
$ZDTH(datetime,dformat,tformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt,localeopt)

パラメータ

datetime 入力する日付と時刻の値。表示形式で指定された日付と時刻を表す文字列です。$ZDATETIMEH は、この日付文字列を $HOROLOG 形式に変換します。datetime 値は、(多様な形式で指定される) 明示的な日付と時刻、または既定で 0 となる時刻値の付いた (多様な形式で指定される) 明示的な日付、あるいは指定された時刻値または既定で 0 となる時刻値の付いた現在の日付を表す文字列 “T” または “t” のいずれかになります。“T” または “t” 文字列は、オプションで符号付きの整数のオフセットを含むことができます。 後述の "datetime" を参照してください。
dformat オプションdatetime の日付部分の日付形式を表す整数コード。datetime が “T” の場合、dformat は 5、6、7、8、9、または 15 のいずれかとする必要があります。後述の "dformat" を参照してください。
tformat オプションdatetime の時刻部分の時刻形式を表す整数コード。後述の "tformat" を参照してください。
monthlist オプション — 一連の月名を表す文字列または変数の名前。この文字列は、区切り文字から始まり、12 個のエントリは、この区切り文字で分けられる必要があります。後述の "monthlist" を参照してください。
yearopt オプション — 年を 2 桁または 4 桁のどちらで表記するかを指定する整数コード。後述の "yearopt" を参照してください。
startwin オプション — 日付を 2 桁の年で表す必要があるスライディング・ウィンドウの最初を指定する数値。後述の "startwin" を参照してください。
endwin オプション — 日付を 2 桁の年で表す必要があるスライディング・ウィンドウの最後を指定する数値。後述の "endwin" を参照してください。
mindate オプション — 有効な日付範囲の下限。$HOROLOG 整数日付カウントの形式で指定し、0 は 1840 年 12 月 31 日を表します。正または負の整数として指定できます。後述の "mindate" を参照してください。
maxdate オプション — 有効な日付範囲の上限。$HOROLOG 整数日付カウントの形式で指定します。後述の "maxdate" を参照してください。
erropt オプションdatetimeが無効のときに返す式。このパラメータに値を指定すると、datetime 値が無効または範囲外の場合に生じるエラー・コードが抑制されます。エラー・メッセージを発行する代わりに、$ZDATETIMEHerropt を返します。後述の "erropt" を参照してください。
localeopt

オプションdformattformatmonthlistyearoptmindatemaxdate の既定値、およびその他の日付と時刻の特性 (日付区切り文字など) に対してどのロケールを使用するかを指定するブーリアン・フラグ。

localeopt=0:現在のロケール・プロパティ設定によって、これらのパラメータの既定値が決定されます。

localeopt=1:ODBC 標準ロケールによって、これらのパラメータの既定値が決定されます。

localeopt 未指定:dformat 値によって、これらのパラメータの既定値が決定されます。dformat=3 の場合は、ODBC の既定値が使用されます。日本およびイスラム暦の日付の dformat 値については、それぞれの既定値が使用されます。その他すべての dformat 値については、現在のロケール・プロパティ設定が既定値として使用されます。後述の "localeopt" を参照してください。オプション — どのロケールを使用するかを指定するブーリアン・フラグ。0 の場合、現在のロケールが、日付区切り文字や時刻区切り文字などの文字、文字列、および日付と時刻のフォーマットに使用するオプションを決定します。1 の場合は、ODBC ロケールが、これらの文字、文字列、およびオプションを決定します。既定値は 0 です。ただし、dformat=3 の場合、既定値は 1 です。下記を参照してください。

指定のパラメータ値間で省略されたパラメータは、プレースホルダのコンマで示されます。末尾のプレースホルダのコンマは必要ありませんが、あってもかまいません。省略されたパラメータを示すコンマの間に空白があってもかまいません。

説明

$ZDATETIMEH は、指定された日付と時刻値を検証し、これを表示形式から内部形式に変換します。対応する $ZDATETIME 関数は、日付と時刻値を内部形式から表示形式に変換します。内部形式は、$HOROLOG または $ZTIMESTAMP によって使用される形式です。コンマで区切られた 2 つの数値の文字列として、日付と時刻値を表します。

返される値は、使用するパラメータによって異なります。

$ZDATETIMEH(datetime) は、日付と時刻値を "MM/DD/[YY]YY hh:mm:ss[.ffff]" 形式から $HOROLOG 形式に変換します。

構文 意味
MM 2 桁の月
DD 2 桁の日
[YY]YY 1900 年から 1999 年までは 2 桁または 4 桁。1900 年より前、または 1999 年より後の年は 4 桁
hh 24 時間形式の時間
mm
ss
ffff 小数秒 (小数点以下 0 から 9 桁まで)

$ZDATETIMEH(datetime,dformat,tformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt) は、($ZDATETIMEを使用して) 最初に指定された日付と時刻値を $HOROLOG 形式または $ZTIMESTAMP 形式に変換します。dformattformatyearoptstartwin および endwin の値は、$ZDATETIME によって使用される値と同一です。

ただし、dformat に 5、6、7、8、または 9 を指定した場合、$ZDATETIMEHdformat コード 1、2、3、5、6、7、8、9 に対応するあらゆる外部アメリカ日付形式の日付を認識して変換します。有効なアメリカ日付形式のリストは、"$ZDATEH" を参照してください。dformat に 15 を使用している場合、$ZDATETIMEH は、曖昧でないあらゆるヨーロッパ日付形式の日付を認識して変換します。有効なヨーロッパ日付形式のリストは、"$ZDATEH" を参照してください。

また、dformat 値に 5、6、7、8、9、または 15 を指定した場合も、文字 “T” または “t” で指定した現在の日付を使用できます。T や t の後に、プラス記号 (+) またはマイナス記号 (-)、および現在の日付より前または後の日数を表す数値を記述することもできます。

$ZDATETIMEH は、関数呼び出しで指定した時刻形式に関係なく、8 つの時刻形式の時刻をすべて認識して変換します。さらに、$ZDATETIMEH は、接尾語 "AM、PM、NOON、MIDNIGHT" を認識して変換します。これらの接尾語は、大文字、小文字、または両方を混在させて表すことができます。これらの接尾語を文字に省略することもできます。

認識する形式は、以下のとおりです。

  • 既定の日付形式、MM/DD/[YY]YY

  • 形式 DDMmm[YY]YY

  • ODBC 形式 [YY]YY-MM-DD

  • 形式、DD/MM/[YY]YY

  • 形式 Mmm D, YYYY

  • 形式 Mmm D YYYY

  • 形式 Mmm DD YY

  • 形式 YYYYMMDD (数値形式)

パラメータ値

datetime

$HOROLOG 形式に変換する日付と時刻の文字列。以下のいずれかを指定できます。

  • 先頭に日付、その後に 1 つの空白スペース、時刻と続く、1 つの文字列に評価される式として指定します。

  • 日付のみを指定する文字列として評価される式。tformat が 7 または 8 (この場合、深夜 (0) からのローカル・タイム・ゾーンのオフセットが既定時刻となる) の場合を除き、時刻の既定値は深夜 (0) となります。

  • 文字コード “T” または “t” は、現在の日付を指定します。この文字の後に、オプションでプラス記号、またはマイナス記号、および現在の日付からのオフセットを日数で指定する整数を付けることができます。この日付式の後に、1 つの空白スペースと時刻式を付けることも、時刻を既定の深夜 (0) とすることもできます。(tformat が 7 または 8 の場合、時刻は既定の深夜 (0) からのローカル・タイム・ゾーンのオフセットとなります。)この現在の日付オプションを使用する場合、dformat の値として 5、6、7、8、9、または 15 を指定する必要があります。

有効な日付値、および時刻値は、現在のロケールの DateFormat プロパティと TimeFormat プロパティ、および dformat パラメータと tformat パラメータに指定する値によって異なります。日付に関する詳細は、"$ZDATEH" を参照してください。

既定では、最も早い有効な datetime 日付は 1840 年 12 月 31 日です (内部 $HOROLOG 表現では 0)。DateMinimum プロパティの既定値は 0 であるため、既定では、日付は正の整数に制限されています。現在のロケールの DateMinimum プロパティが、過去の日付を表す負の整数以下の負の整数に設定されていれば、過去の日付を負の整数を使用して指定できます。DateMinimum の有効な最小値は -672045 であり、これは 0001 年 1 月 1 日に対応します。Caché では、ISO 8601 標準に準拠してグレゴリオ暦が “西暦 1 年” まで遡って適用された先発グレゴリオ暦が使用されています。その理由の 1 つは、グレゴリオ暦が採用された時期は国ごとに異なるからです。例えば、欧州大陸諸国の多くでは 1582 年に採用された一方で、英国と米国では 1752 年に採用されました。このため、ご使用の地域でグレゴリオ暦が採用された時期より前の Caché の日付は、その当時にその地域で採用されていた暦に基づいて記録された歴史上の日付に対応していない可能性があります。1840 年より前の日付の詳細は、"mindate" パラメータを参照してください。

dformat

日付の形式です。有効な値は以下のとおりです。

意味
1 MM/DD/[YY]YY (07/01/97 または 03/27/2002) — アメリカの数値形式。現在のロケール用の正しい日付区切り文字 (/ または .) を指定する必要があります。
2 DD Mmm [YY]YY (01 Jul 97 あるいは 27 Mar 2002)
3 [YY]YY-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 (19930701 あるいは 20020327) - 数値形式
9 Mmmmm D, YYYY (July 1, 1997 あるいは March 27, 2002)
13 [D]D/[M]M/YYYY (1/7/2549 または 27/11/2549) — タイ語の日付形式。日と月は、ヨーロッパ形式と同じですが、先頭に 0 は付きません。年は仏教紀元 (BE) で、グレゴリオ暦の年に 543 年追加して計算されます。
15 DD/MM/[YY]YYYYYY-MM-DD、日付区切り文字を使用した曖昧ではないあらゆるヨーロッパ日付形式、または日付区切り文字を使用しない YYYYMMDD。日付区切り文字は、現在のロケールで指定されている日付区切り文字に関係なく、英数字以外の任意の文字 (空白も含む) ならどれでもかまいません。また、monthlist 名および “T” も使用できます。有効なヨーロッパ日付形式のリストは、"$ZDATEH" を参照してください。
16 YYYYc[M]Mc[D]Dc — 日本の日付形式。年、月、および日の数は、他の日付形式と同じです。先頭のゼロは省略されます。“年”、“月”、および “日” の日本語の文字 (ここでは c として表示) は、年、月、および日の数の後に挿入されます。これらの文字は、年=$CHAR(24180)、月=$CHAR(26376)、および日=$CHAR(26085) です。
17 YYYYc[M]Mc[D]Dc — 日本の日付形式。dformat 16 と同じです。ただし、“年” および “月” の日本語の文字の後に空白が挿入されます。
18 [D]D Mmmmm YYYY — Tabular Hijri (イスラム) 日付形式 (完全な月名を示す)。日の先頭のゼロは省略され、年の先頭のゼロは組み込まれます。Caché 日付 -445031 (07/19/0622 C.E.)= 1 Muharram 0001。
19 [D]D [M]M YYYY — Tabular Hijri (イスラム) 日付形式 (完全な月番号を示す)。日と月の先頭のゼロは省略され、年の先頭のゼロは組み込まれます。Caché 日付 -445031 (07/19/0622 C.E.)= 1 1 0001。
20 [D]D Mmmmm YYYY — Observed Hijri (イスラム) 日付形式 (完全な月名を示す)。既定で Tabular Hijri (dformat 18) になります。Tabular での計算をオーバーライドするには、新月周期の観測を追加するために %Calendar.HijriOpens in a new tab クラスを使用します。
21 [D]D [M]M YYYY — Observed Hijri (イスラム) 日付形式 (完全な月番号を示す)。 既定で Tabular Hijri (dformat 19) になります。Tabular での計算をオーバーライドするには、新月周期の観測を追加するために %Calendar.HijriOpens in a new tab クラスを使用します。
-1 有効な dformat 値は、現在のロケールDateFormat プロパティから取得します。dformat を指定しなければ、これが既定の振る舞いになります。
-2

$ZDATETIMEH は、UTC 秒の整数値を取り、対応するローカルの $HOROLOG の日付/時刻値を返します。これは、$ZDATETIME dformat –2 の逆になります。詳細は、"$ZDATETIME dformat –2" を参照してください。

datetime の入力値は、ISO C プログラミング言語標準の定義に従って time() ライブラリ関数から返される値です。例えば、POSIX 準拠システムでは、この値は協定世界時 1970 年 1 月 1 日 00:00:00 (January 1, 1970 00:00:00 UTC) を起点とする経過秒数です。

tformatmonthlistyearoptstartwin、および endwin の各パラメータは無視されます。

-3 $ZDATETIMEH は、$ZTIMESTAMP 内部形式で指定された datetime 値を取り、この値を UTC 時刻からローカル時刻に変換し、その結果をこの内部形式で返します。tformatmonthlistyearoptstartwin、および endwin の各パラメータは無視されます。$ZDATETIME はこの逆の処理を行います (現在、この日付変更の際に、時刻変換の変則性が発生する可能性があります。この変則性は tformat 値が 7 または 8 の場合に該当するものです。これにより、1970 年より前の日付、2038 年より後の日付、およびサマータイムの開始日と終了日などのローカル時刻調整の境界日が影響を受ける可能性があります)。

以下はその説明です。

構文 意味
YYYY YYYY は 4 桁の年です。[YY]YY は、datetime がアクティブ・ウィンドウ内で 2 桁の日付の場合は 2 桁の年、それ以外は 4 桁の数字です。
MM 2 桁の月。
D 日付が 10 未満の場合は 1 桁、それ以外は 2 桁の日。
DD 2 桁の日。
Mmm

Mmm は、現在のロケールの MonthAbbr プロパティから取得した月の省略形です。以下はその既定値です。

“Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec”

別の月の省略形 (あるいは長さに制限のない名前) は、$ZDATETIMEHmonthlist パラメータとして指定したオプションのリストから取得することができます。

Mmmmm

現在のロケールの MonthName プロパティによって指定される正式な月名。以下はその既定値です。“January February March ...November December”

別の月の名前は、$ZDATETIMEHmonthlist パラメータとして指定したオプションのリストから取得することができます。

dformat の既定値

dformat を省略するか、-1 に設定した場合、dformat の既定値は localeopt パラメータと NLS の DateFormat プロパティに依存します。

  • localeopt=1 の場合、dformat の既定値は ODBC 形式です。tformatmonthlistyearoptmindate、および maxdate パラメータの既定値も、ODBC 形式に設定されます。これは、dformat=3 を設定した場合と同じです。

  • localeopt=0 または未指定の場合、dformat の既定値は NLS の DateFormat プロパティから取得されます。DateFormat=3 の場合、dformat の既定値は ODBC 形式です。ただし、DateFormat=3 は tformatmonthlistyearoptmindate、および maxdate パラメータの既定値に影響しません。これらは、NLS の現在のロケール定義で指定されます。

ユーザのロケールの既定の日付プロパティを決定するには、GetFormatItem()Opens in a new tab NLS クラス・メソッドを呼び出します。

  WRITE ##class(%SYS.NLS.Format).GetFormatItem("DateFormat"),!
  WRITE ##class(%SYS.NLS.Format).GetFormatItem("DateSeparator")

$ZDATETIMEH は、dformat=1 または 4 の場合に、現在のロケールの DateSeparator プロパティの値 (/ または .) を、月、日、および年の区切り文字として使用します。

ヨーロッパ日付形式 (dformat=4、DD/MM/YYYY の順) は、ヨーロッパの多くの言語 (すべてではない) で既定です。これには、“/” を DateSeparator 文字として使用するイギリス英語、フランス語、ドイツ語、イタリア語、スペイン語、ポルトガル語、および “.” をDateSeparator 文字として使用するチェコ語 (csyw)、ロシア語 (rusw)、スロバキア語 (skyw)、スロベニア語 (svnw)、ウクライナ語 (ukrw) が含まれます。サポートされるロケールの既定の日付形式の詳細は、"Caché ObjectScript の使用法" の "日付" を参照してください。

dformat の設定

dformat が 3 (ODBC 形式の日付) の場合は、tformatmonthlistyearoptmindate、および maxdate パラメータの既定値にも ODBC 形式の既定値が使用されます。現在のロケールの既定値は無視されます。

dformat が 16 または 17 (日本の日付形式) の場合、日付形式はロケールの設定に依存しません。日本の日付形式を使用するには、Unicode Caché インスタンスを使用する必要があります。8 ビット Caché インスタンスで dformat に 16 または 17 を指定すると、<ERWIDECHAR> エラーが発生します。

dformat が 18、19、20、または 21 (イスラム暦の日付形式) で、localeopt が未指定の場合、パラメータの既定値は現在のロケールの既定値ではなく、イスラム暦の既定値になります。monthlist パラメータの既定値は、ラテン文字で書き直されたアラビア語の月名になります。tformatyearoptmindate、および maxdate パラメータの既定値は、ODBC の既定値になります。日付区切り文字の既定値は、ODBC の既定値や現在のロケールの DateSeparator プロパティ値ではなく、イスラム暦の既定値 (空白) になります。localeopt=0 の場合は、現在のロケール・プロパティの既定値がこれらのパラメータに使用されます。localeopt=1 の場合は、ODBC の既定値がこれらのパラメータに使用されます。

tformat

時刻値の入力形式を指定する数値。サポートされている値は、以下のとおりです。

意味
-1 現在のロケールの TimeFormat プロパティから、有効な tformat 値を取得します。既定は 1 です。dformat の値が 3 以外で、tformat を指定しない場合は、これが既定の動作になります。
1 時刻を "hh:mm:ss" (24 時間) の形式で指定します。これは dformat=3 である場合の既定です。
2 時刻を "hh:mm" (24 時間) の形式で指定します。
3 時刻を "hh:mm:ss[AM/PM]" (12 時間) の形式で指定します。
4 時刻を "hh:mm[AM/PM]" (12 時間) の形式で指定します。
5 時刻を "hh:mm:ss+/-hh:mm" (24 時間) の形式で指定します。時刻を現地時間で指定します。オプションの接尾語として、プラス (+) 接尾語またはマイナス (–) 接尾語とこれに続く協定世界時 (UTC) からの現地時間のオフセットが付加される場合がありますが、これは無視されます。マイナス符号 (-hh:mm) は、返された時間と分のオフセット数により、現地時間がグリニッジ子午線より早い (西向きである) ことを示します。プラス符号 (+hh:mm) は、返された時間と分のオフセット数により、現地時間がグリニッジ子午線より遅い (東向きである) ことを示します。
6 時刻を "hh:mm+/-hh:mm" (24 時間) の形式で指定します。時刻を現地時間で指定します。オプションの接尾語として、プラス (+) 接尾語またはマイナス (–) 接尾語とこれに続く協定世界時 (UTC) からの現地時間のオフセットが付加される場合がありますが、これは無視されます。マイナス符号 (-hh:mm) は、返された時間と分のオフセット数により、現地時間がグリニッジ子午線より早い (西向きである) ことを示します。プラス符号 (+hh:mm) は、返された時間と分のオフセット数により、現地時間がグリニッジ子午線より遅い (東向きである) ことを示します。
7 時刻を "hh:mm:ssZ" (24 時間) の形式で指定します。時刻は、協定世界時 (UTC) で指定する必要があります。オプションの “Z” 接尾語が付加されるか、または省略される場合がありますが、これは無視されます。この接尾語は、時刻が現地時間ではなく、協定世界時 (UTC) であると想定されていることを示すだけです。
8 時刻を "hh:mmZ" (24 時間) で指定します。時刻は、協定世界時 (UTC) で指定する必要があります。オプションの “Z” 接尾語が付加されるか、または省略される場合がありますが、これは無視されます。この接尾語は、時刻が現地時間ではなく、協定世界時 (UTC) であると想定されていることを示すだけです。

datetime 文字列に日付部分と時刻部分の両方が含まれている場合、時刻部分は、1 つのスペースと大文字の "T" のいずれかで日付部分から分離されます。時刻部分がある場合は、以下のようになります。

  • 時刻形式 1 から 6 は、datetime が結果と同じタイム・ゾーンを使用して現地時間を指定すると想定します。

  • 時刻形式 7 および 8 は、datetime が UTC 時刻を指定すると想定します。これらの形式は、日付と時刻の両方をシステム・ローカル時刻に変換します。

時刻形式 5 から 8 では、datetime の時刻値の後に大文字の "Z" あるいは "+" または "-" で始まる UTC オフセットのいずれかで構成される接尾語が続く場合があります。接尾語があっても、タイム・ゾーン変換には影響しません。

Note:

dformat 値が -2 および -3、tformat 値が 7 および 8、かつ tformat 値が 5 および 6 のときに生成される UTC オフセットを含む変換には、以下のプラットフォーム依存の変則性があります。

  • ローカル時刻調整の境界でのこの動作はオペレーティング・システム・プラットフォームによって異なります。ローカル時刻調整の変更が発生し、ローカル時計が逆方向にシフトすると (サマータイムの終了日の “戻し”)、そのローカル時刻の時間が繰り返されます。この 2 時間以内に時刻を変換すると、Caché では、このローカル時刻の 1 時間目に対して時刻変換処理を行うのか、2 時間目に対して行うのかを判断できません。$ZDATETIME では、プラットフォーム固有のランタイム・ライブラリで使用されている前提を採用します。したがって、この時間枠の範囲では、オペレーティング・システム・プラットフォームによって時刻変換の結果が異なる可能性があります。

  • Caché は、オペレーティング・システム・プラットフォームがサポートしているすべての日付に対して、標準時オフセットを使用してローカル時刻と UTC 時刻の変換を実行します。

    指定の日付がプラットフォームがサポートしている最初の日付より前の場合、Caché は、1902-01-01 に対する標準時オフセットを使用します (この日付がプラットフォームでサポートされている場合)。日付 1902-01-01 がプラットフォームでサポートされていない場合、Caché は、1970–01–01 に対する標準時オフセットを使用します。現地時刻調整オフセット (サマータイムなど) は無視されます。

    指定の日付がプラットフォームがサポートしている最後の日付より後の場合、Caché は、2010-01-01 から 2037-12-31 の範囲内で対応する日付を計算し、その対応する日付に対する標準時オフセットを使用します。このアルゴリズムは、2100-02-28 までの日付に対して、正確な時刻オフセットを実現します (今後、日付/時刻を管理する法律の変更がない場合)。

ユーザのロケールの既定の時刻形式を決定するには、GetFormatItem()Opens in a new tab NLS クラス・メソッドを呼び出します。

  WRITE ##class(%SYS.NLS.Format).GetFormatItem("TimeFormat")

12 時間形式 (tformat 3 および 4)

12 時間形式では、午前と午後を時間接尾語で指定します。ここでは、AM と PM で表示されています。ユーザのロケールの既定の時間接尾語を決定するには、以下のように GetFormatItem()Opens in a new tab NLS クラス・メソッドを呼び出します。

  WRITE ##class(%SYS.NLS.Format).GetFormatItem("AM"),!
  WRITE ##class(%SYS.NLS.Format).GetFormatItem("PM"),!

dformat の値が 3、18、19、20、21 以外の場合、AM および PM プロパティは既定で現在のロケール定義になります。 dformat=3 (ODBC の日付形式) および dformat=18、19、20、または 21 (イスラム暦の日付形式) の場合は、現在のロケールのプロパティ値に関係なく、時間接尾語は常に “AM” および “PM”になります。AM および PM プロパティは、日本のロケール jpww を除くすべてのロケールで “AM” と “PM” になります。

日本のロケール (jpnw、jpuw、jpww、zdsw、zdtw、zduw)、ポルトガル (ptbw)、ロシア (rusw)、およびウクライナ (ukrw) を除くすべてのロケールで、既定では深夜と正午は “MIDNIGHT” および “NOON” で表されます。ただし、dformat=3 の場合、$ZDATETIMEHでは、ロケールの既定の設定に関係なく、常に ODBC 標準値を使用します。

monthlist

区切り文字で区切られた月名または月の省略名の文字列に解決される式です。monthlist にある名前は、現在のロケールの MonthAbbr プロパティに指定されている既定の月の省略形の値、または MonthName に指定されている月名の値を置き換えます。

monthlist は、dformat が 2、5、6、7、9、15、18、または 20 の場合にのみ有効です。dformat がそれ以外の値の場合、$ZDATETIMEHmonthlist を無視します。

monthlist 文字列の形式は、以下のとおりです。

  • 文字列の最初の文字は、区切り文字 (通常はスペース) です。monthlist 内の最初の月名の前と、各月名の間に、同じ区切り文字を置く必要があります。1 文字からなる任意の区切り文字を指定できます。この区切り文字は、指定された datetime 値の月、日、年の間に指定する必要があります。このため、スペースが通常推奨される区切り文字となります。

  • 月名の文字列は、1 月 から 12 月に対応する 12 個の区切り値を含む必要があります。12 より多い、または 12 より少ない月名を指定することは可能ですが、datetime の月に該当する月名がない場合、<ILLEGAL VALUE> エラーが発生します。

monthlist を省略するか、monthlist の値として -1 を指定した場合は、現在のロケールの MonthAbbr または MonthName プロパティで定義されている月名のリストが $ZDATETIMEH で使用されます (localeopt=1、または monthlist の既定値が ODBC の月リスト (英語) である場合を除く)。localeopt が未指定で、dformat が 18 または 20 (イスラム暦の日付形式) の場合、monthlist の既定値はイスラム暦の月リスト (ラテン文字で表されたアラビア語の名前) になり、MonthAbbr および MonthName プロパティ値は無視されます。

ユーザのロケールの既定の月名および月名の省略形を決定するには、GetFormatItem()Opens in a new tab NLS クラス・メソッドを呼び出します。

  WRITE ##class(%SYS.NLS.Format).GetFormatItem("MonthName"),!
  WRITE ##class(%SYS.NLS.Format).GetFormatItem("MonthAbbr"),!

yearopt

dformat 値に 0、1、2、4、7 を使用して、年を 2 桁で表示する時間ウィンドウを指定する数値コードです。yearopt の値は以下のとおりです。

意味
-1 現在のロケールの YearOption プロパティから有効な yearopt 値を取得します。既定値は 0 です。yearopt を指定しない場合は、これが既定の動作になります。
0 (%DATE ユーティリティにより構築される) プロセス特有のスライディング・ウィンドウが有効になっていない限り、20 世紀 (1900 年から 1999 年まで) の日付は 2 桁で表示します。スライディング・ウィンドウが有効な場合は、指定範囲内の日付のみ 2 桁の年で表示します。1900 年代以外もしくはプロセス特有のスライディング・ウィンドウ以外の日付は、すべて 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 の場合、startwinendwin は相対年になります。
6 2 桁の年で現在の世紀にあるすべての日付を表します。それ以外は 4 桁の年で表します。

yearopt を省略するか、yearopt の値として -1 を指定した場合は、現在のロケールの YearOption プロパティが $ZDATETIMEH で使用されます (localeopt=1、または yearopt の既定値が ODBC の年オプションである場合を除く)。localeopt=0 または未指定で、dformat が 18、19、20、または 21 (イスラム暦の日付形式) の場合、yearopt の既定値は ODBC の年オプション (4 桁の年) になります。イスラム暦の日付では、YearOption プロパティの値は無視されます。

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 年間です。endwin 値を -1 とすると特殊なケースになります。endwin の値が -1 よりも大きい場合または小さい場合に erropt が返される場合でも、-1 の場合は必ず日付値が返されます。このため、100 年間のウィンドウを指定する場合は endwin を省略し、その他の場合でも endwin には負の値を指定しないようにすることをお勧めします。

startwinendwin の両方を指定する場合、指定するスライディング・ウィンドウの年数は 100 年以内に収める必要があります。

mindate

有効な日付範囲 (両端を含む) の下限を指定する式です。$HOROLOG 整数日付カウント (例えば、1/1/2013 は 62823 と表される) または $HOROLOG 文字列値の形式で指定できます。$HOROLOG 日付文字列 (“62823,43200” など) の時刻部分は含めることも省略することもできますが、解析されるのは mindate の日付部分のみです。mindate より前の datetime 値を指定すると、<VALUE OUT OF RANGE> エラーが発生します。

mindate に指定できる値は以下のとおりです。

  • 正整数 : 通常は、mindate には、1840 年 12 月 31 日より後の最も早い有効日付を設定するための正の整数を指定します。例えば、mindate に 21550 を指定すると、1900 年 1 月 1 日が最も早い有効日付として設定されます。有効な最大値は 2980013 です (9999 年 12 月 31 日)。

  • 0 : 1840 年 12 月 31 日を最も早い日付として指定します。これは DateMinimum プロパティの既定値です。

  • -2 以下の負の整数 : 1840 年 12 月 31 日から遡ってカウントする最も早い日付を指定します。例えば、mindate に -14974 を指定すると、1800 年 1 月 1 日が最も早い有効日付として設定されます。負の mindate 値が有効となるのは、現在のロケールの DateMinimum プロパティがその値以下の負の整数に設定されている場合のみです。有効な最小値は -672045 です。

  • mindate を省略するか、-1 を指定した場合は、現在のロケールの DateMinimum プロパティ値が既定値になります (localeopt=1 または mindate の既定値が 0 の場合を除く)。localeopt が未指定で dformat=3 の場合、mindate の既定値は 0 になります。localeopt が未指定で dformat が 18、19、20、または 21 (イスラム暦の日付形式) の場合、mindate の既定値は 0 になります。

DateMinimum プロパティは、以下のように取得および設定できます。

  SET min=##class(%SYS.NLS.Format).GetFormatItem("DateMinimum")
  WRITE "initial DateMinimum value is ",min,!
Permit18thCenturyDates
  SET x=##class(%SYS.NLS.Format).SetFormatItem("DateMinimum",-51498)
  SET newmin=##class(%SYS.NLS.Format).GetFormatItem("DateMinimum")
  WRITE "set DateMinimum value is ",newmin,!!
RestrictTo19thCenturyDates
  WRITE $ZDATETIMEH("05/29/1805 12:00:00",1,,,,,,-14974),!!
ResetDateMinimumToDefault
  SET oldmin=##class(%SYS.NLS.Format).SetFormatItem("DateMinimum",min)
  WRITE "reset DateMinimum value from ",oldmin," to ",min 

mindate を指定する際は、maxdate を指定しても指定しなくてもかまいません。maxdate より大きい mindate を指定すると、<ILLEGAL VALUE> エラーが発生します。

maxdate

有効な日付範囲 (両端を含む) の上限を指定する式です。$HOROLOG 整数日付カウント (例えば、1/1/2100 は 94599 と表される) または $HOROLOG 文字列値の形式で指定できます。$HOROLOG 日付 (“94599,43200” など) の時刻部分は含めることも省略することもできますが、解析されるのは maxdate の日付部分のみです。

maxdate を省略するか、または -1 を指定すると、現在のロケールの DateMaximum プロパティから日付の上限が取得されます。既定値は、$HOROLOG の日付部分で許容される最大値である、2980013 (9999 年 12 月 31 日に対応) です。ただし、DateMaximum プロパティの適用は localeopt の設定によって制御されます。localeopt=1 (dformat=3 の場合の既定値) の場合、現在のロケール設定に関係なく、日付の既定最大値は ODBC の値 (2980013) になります。イスラム暦の日付形式でも ODBC の既定値が使用されます。タイ日付形式 (dformat=13) の最大日付は BE 9999 年 12 月 31 日で $HOROLOG 2781687 に対応します。

maxdate より大きい datetime を指定すると、<VALUE OUT OF RANGE> エラーが発生します。

2980013 より大きい maxdate を指定すると、<ILLEGAL VALUE> エラーが発生します。

maxdate を指定する際は、mindate を指定しても指定しなくてもかまいません。mindate より小さい maxdate を指定すると、<ILLEGAL VALUE> エラーが発生します。

erropt

このパラメータに値を指定すると、datetime 値が無効または範囲外の場合に生じるエラーが抑制されます。$ZDATETIMEH 関数は、<ILLEGAL VALUE> または <VALUE OUT OF RANGE> エラーを生成する代わりに erropt 値を返します。

Caché は、datetime に対して標準の数値評価を実行し、常に mindate から maxdate までの範囲内の整数日付に評価します。したがって、7、"7"、+7、0007、7.0、"7 dwarves"、--7 は、すべて同じ日付値 (01/07/1841) に評価されます。既定では、2980013 を超える値または 0 未満の値は <VALUE OUT OF RANGE> エラーを生成します。小数値は <ILLEGAL VALUE> エラーを生成します。数値以外の文字列 (NULL 文字列を含む) は 0 に評価され、$HOROLOG の最初の日付 (12/31/1840) が返されます。

erropt パラメータは、datetime の無効な値または範囲外の値が原因で生成されるエラーのみを抑制します。他のパラメータの無効な値、または範囲外の値が原因で発生したエラーについては、erropt が指定されているかどうかに関係なく、常にエラーが生成されます。例えば、$ZDATETIMEHendwinstartwin より前になる値のスライディング・ウィンドウを指定すると、常に <ILLEGAL VALUE> エラーが発生します。同様に、maxdatemindate より小さい場合、<ILLEGAL VALUE> エラーが発生します。

localeopt

このブーリアン・パラメータには、ロケールで指定されるパラメータ dformattformatmonthlistyearoptmindate、および maxdate の既定値のソースとして、ユーザの現在のロケール定義または ODBC のロケール定義が指定されます。

  • localeopt=0 の場合は、これらすべてのパラメータで現在のロケール定義の既定値が使用されます。

  • localeopt=1 の場合は、これらすべてのパラメータで ODBC の既定値が使用されます。

  • localeopt が未指定の場合は、dformat パラメータによってこれらのパラメータの既定値が決定されます。dformat=3 の場合は、ODBC の既定値が使用されます。dformat が 18、19、20、または 21 の場合は、現在のロケール定義に関係なく、イスラム暦の日付および時刻形式の既定値が使用されます。dformat がそれ以外の値の場合は、現在のロケール定義の既定値が使用されます。詳細は、"dformat" の説明を参照してください。

ODBC 標準ロケールは変更できません。これは、異なる各国語サポート (NLS) の選択を行った Caché プロセス間で移植できる、日付文字列および時刻文字列をフォーマットするために使用されます。ODBC ロケールの日付と時刻の定義は、以下のとおりです。

  • 日付形式の既定は 3 です。したがって、dformat が未定義または -1 の場合は、日付形式 3 が使用されます。

  • 日付の区切り文字の既定は "/" です。ただし、日付形式の既定は 3 で、これは日付の区切り文字として "-" を常に使用します。

  • 年のオプションの既定は 4 桁です。

  • 日付の最小値は 0 で、最大値は 2980013 ($HOROLOG の日数カウント) です。

  • 英語の月名、月の省略形、曜日名、曜日の省略形、および “Noon” と “Midnight” の語が使用されます。

  • 時刻形式は既定で 1 になります。時刻区切り文字は “.” です。時刻精度は 0 (小数秒なし) です。午前と午後の指定子は、"AM" と "PM" です。

メモ

$ZDATETIMEH と秒の小数部

$ZDATETIME とは異なり、$ZDATETIMEH は時刻の有効桁数を指定することはできません。元の $ZDATETIME 時刻形式の秒の小数部は、$ZDATETIMEH が返す値に保持されます。

$HOROLOG 形式も秒の小数部を返しません。

$ZDATETIMEH で無効な値

以下の状況では、<FUNCTION> エラーが発生します。

  • 無効な dformat コード (無効な整数値または整数以外の値) を指定した場合。

  • tformat に無効な値 (-1 未満または 8 より大きい整数値、0、整数以外の値) を指定した場合。

  • yearopt が 3 あるいは 5 の場合に、startwin 値を指定しない場合。

以下の状況で、<ILLEGAL VALUE> エラーが発生します。

  • 日付/時刻単位に無効な値を指定した場合。指定した場合は、<ILLEGAL VALUE> が発行されるのではなく、erropt 値が返されます。

  • ODBC 日付形式の日付/時刻単位に余分な先頭のゼロを指定した場合。例えば、2007 年 2 月 3 日は、“2007–2–3” または “2007–02–03” で表せますが、“2007–002–03” に対して <ILLEGAL VALUE> を受け取ります。指定した場合は、<ILLEGAL VALUE> が発行されるのではなく、erropt 値が返されます。

  • 指定された月数が monthlist にある値よりも大きい場合。

  • maxdatemindate よりも小さい場合。

  • endwinstartwin よりも小さい場合。

  • startwinendwin で、期間が 100 年より長い一時的なスライディング・ウィンドウが指定された場合。

以下の状況では、<VALUE OUT OF RANGE> エラーが発生します。

  • 1840 年 12 月 31 日より前、あるいは 9999 年 12 月 31 日より後の日付 (あるいは "T" のオフセット) を指定して、erropt 値を指定しない場合。

  • mindatemaxdate の範囲外にある、範囲内にあれば有効であった日付 (あるいは “T” のオフセット) を指定し、erropt 値を指定しない場合。

現在の日付

以下の例では、“T” または “t” 文字コードを使用して現在の日付を指定する方法を示します。ただし、dformat には 5、6、7、8、9、または 15 を指定する必要があります。

時刻が既定の 0 となっている現在の日付は、以下のとおりです。

   WRITE $ZDATETIMEH("T",5)

時刻が既定の 0 となっている現在の日付の 3 日前は、以下のとおりです。

   WRITE $ZDATETIMEH("T-3",5)

時刻が指定されている、現在の日付の 2 日後は、以下のとおりです。

   WRITE $ZDATETIMEH("T+2 11:45:00",5)

$ZDATEH と $ZDATETIMEH

$ZDATETIMEH は、$ZDATEH に似ていますが、異なる点として、日付と時刻の値の両方を内部 $HOROLOG 形式に (時刻値を指定していない場合でも) 変換します。$ZDATEH は、日付値のみを $HOROLOG 形式に変換します。以下はその例です。

   WRITE $ZDATEH("Nov 25, 2002",5)

これは、59133 を返します。

   WRITE $ZDATETIMEH("Nov 25, 2002 10:08:09.539",5)

これは、59133,36489.539 を返します。

$ZDATETIMEH に値を指定しない場合

   WRITE $ZDATETIMEH("Nov 25, 2002",5)

これは、59133.0 を返します。

時刻値を指定せず、tformat を 7 または 8 にして $ZDATETIMEH を指定する場合

   WRITE $ZDATETIMEH("Nov 25, 2002",5,7)

59133,68400 のような値が返されます。ここで、時刻値は、深夜からのローカル・タイム・ゾーンのオフセットです。この場合、米国東部標準時間は、UTC から 5 時間オフセットされているので、ここでの時刻値は、19:00 (深夜から 5 時間オフセット) を表します。

関連項目

FeedbackOpens in a new tab