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?

$ZDATETIME

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

Synopsis

$ZDATETIME(hdatetime,dformat,tformat,precision,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt,localeopt)
$ZDT(hdatetime,dformat,tformat,precision,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt,localeopt)

パラメータ

hdatetime 内部日付/時刻形式で指定した、日付と時刻の値。後述の "hdatetime" を参照してください。
dformat オプション — 返される日付値の形式を表す整数コード。後述の "dformat" を参照してください。
tformat オプション — 返される時刻値の形式を表す整数コード。後述の "tformat" を参照してください。
precision オプション — 返される時刻値の小数点以下の有効桁数 (小数秒) を表す整数。後述の "precision" を参照してください。
monthlist オプション — 一連の月名を表す文字列または変数の名前。この文字列は、区切り文字から始まり、12 個のエントリは、この区切り文字で分けられる必要があります。後述の "monthlist" を参照してください。
yearopt オプション — 年を 2 桁または 4 桁のどちらで表記するかを指定する整数コード。後述の "yearopt" を参照してください。
startwin オプション — 日付を 2 桁の年で表す必要があるスライディング・ウィンドウの最初を指定する数値。後述の "startwin" を参照してください。
endwin オプション — 日付を 2 桁の年で表す必要があるスライディング・ウィンドウの最後を指定する数値。後述の "endwin" を参照してください。
mindate オプション — 有効な日付範囲の下限。$HOROLOG 整数日付カウントの形式で指定し、0 は 1840 年 12 月 31 日を表します。正または負の整数として指定できます。後述の "mindate" を参照してください。
maxdate オプション — 有効な日付範囲の上限で、整数の $HOROLOG 日付カウントの形式で指定します。後述の "maxdate" を参照してください。
erropt オプションhdatetimeが無効のときに返す式。このパラメータに値を指定すると、hdatetime 値が無効または範囲外の場合に生じるエラー・コードが抑制されます。エラー・メッセージを発行する代わりに、$ZDATETIMEerropt を返します。後述の "erropt" を参照してください。
localeopt

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

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

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

localeopt 未指定:dformat 値によって、これらのパラメータの既定値が決定されます。dformat=3 の場合は、ODBC の既定値が使用されます。それ以外の場合は、現在のロケール・プロパティ設定が使用されます。後述の "localeopt" を参照してください。

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

説明

$ZDATETIME は、指定された日付と時刻を検証し、それらを $HOROLOG 内部形式あるいは $ZTIMESTAMP 内部形式から、別の日付時刻の表示形式に変換します。返される値は、指定するパラメータによって異なります。

  • $ZDATETIME(hdatetime) は、現在のロケール用の既定の表示形式で、日付と時刻を返します。

  • $ZDATETIME (hdatetimedformattformatprecisionmonthlistyearoptstartwinendwinmindatemaxdate) は、指定する他のパラメータによってさらに定義された、dformattformatで指定される表示形式で、日付と時刻を返します。有効な日付の範囲は、mindate パラメータと maxdate パラメータによって制限される場合があります。

パラメータ

hdatetime

内部形式値として指定された日付と時刻。Caché 内部形式は、任意の開始ポイント (1840 年 12 月 31 日) からの日数で日付を表示し、その日の秒数で時刻を表示します。hdatetime の値は、以下のいずれかの形式の文字列である必要があります。

  • $HOROLOG : コンマで区切られた、2 つの符号なし整数。1 つ目は、日付 (日数) を指定する整数で、2 つ目は、時刻 (秒数) を指定する整数です。

  • $ZTIMESTAMP : コンマで区切られた、2 つの符号なしの数。1 つ目は、日付 (日数) を指定する整数で、2 つ目は、時刻 (秒と小数秒数) を指定する整数です。時刻値は、小数点以下有効桁数 9 桁 (小数秒) まで表示できます。

hdatetime は、文字列値、変数、式として指定できます。

hdatetime で日付部分の値のみが指定され、コンマが指定されない場合、日付のみが返されます。hdatetime で日付部分の値の後にコンマが指定され、時刻値が指定されない場合、時刻値として 00:00:00 が指定されます。

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

hdatetime 値が無効または範囲外の場合に生じるエラーは、erropt パラメータで示されます。

dformat

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

意味
1 MM/DD/[YY]YY (07/01/97 または 03/27/2002) — アメリカの数値形式。日付区切り文字 (/ または .) は、現在のロケール設定から取得されます。
2 DD Mmm [YY]YY (01 Jul 97)
3 YYYY-MM-DD (1997-07-01) — ODBC 形式。既定では、この形式は、ユーザの現在のロケール設定に依存しません。したがって、日付と時刻を ODBC 標準交換形式で指定します。(ODBC の時刻形式の既定は、以下の tformat で説明しています。)日付と時刻に対するユーザの現在のロケール設定をこの形式で使用するには、localeopt を 0 に設定します。
4 DD/MM/[YY]YY (01/07/97 または 27/03/2002) — ヨーロッパの数値形式。日付区切り文字 (/ または .) は、現在のロケール設定から取得されます。
5 Mmm [D]D, YYYY (Jul 1, 1997)
6 Mmm [D]D YYYY (Jul 1 1997)
7 Mmm DD [YY]YY (Jul 01 1997)
8 YYYYMMDD (19970701) — 数値形式
9 Mmmmm [D]D, YYYY (July 1, 1997)
10 W (2) — 曜日の番号。0 (日) から 6 (土) までの数値で指定します。$SYSTEM.SQL.DAYOFWEEK()Opens in a new tab メソッドと比較してください。
11 Www (Tue) — 曜日の略名
12 Wwwwww (Tuesday) — 正式な曜日の名前
13 [D]D/[M]M/YYYY (1/7/2549 または 27/11/2549) — タイ語の日付形式。日と月は、ヨーロッパ形式と同じですが、先頭に 0 は付きません。年は仏教紀元 (BE) で、グレゴリオ暦の年に 543 年追加して計算されます。
14 nnn (354) — 年の日付
15 DD/MM/[YY]YY (01/07/97 や 27/03/2002) — ヨーロッパ形式 (dformat=4 と同じ)。日付区切り文字 (/ または .) は、現在のロケール設定から取得されます。
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 ユーザのロケールの fmt.DateFormat から有効な dformat 値を取得します。fmt は、現在のプロセスに関連付けられた ##class(%SYS.NLS.Format) のインスタンスです。dformat を指定しなければ、これが既定の振る舞いになります。詳細は、“日付と時刻の既定値のカスタマイズ” を参照してください。
-2

$ZDATETIME は、プラットフォーム固有の日付/時刻の起点からの経過秒数を表す整数を返します。これは、ISO C プログラミング言語標準の定義に従って time() ライブラリ関数から返される値です。例えば、POSIX 準拠システムでは、この値は協定世界時 1970 年 1 月 1 日 00:00:00 (January 1, 1970 00:00:00 UTC) を起点とする経過秒数です。入力値では秒の小数部を指定できますが、無視されます。

(現在、この日付変換の際に、“ローカル時刻調整の境界日” での時刻変換の変則性が発生する可能性があります。この変則性は、tformat 値が 5、6、7、または 8 の場合に該当するものです)。

次に示すプラットフォーム固有形式がサポートされています。32 ビット Linux では 32 ビット符号付き整数、64 ビット Linux では 64 ビット符号付き整数、Windows では 64 ビット符号なし整数です。詳細は、"Caché MultiValue Basic Reference" で MultiValue Basic の SYSTEM(99) 関数の説明を参照してください

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

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

以下は、この指定の説明です。

構文 意味
YYYY YYYY は 4 桁の年です。[YY]YY は、hdatetime がアクティブ・ウィンドウ内で 2 桁の場合は 2 桁、それ以外は 4 桁です。
MM 2 桁の月 : 01 から 12。[M]M は、1 月から 9 月では先頭のゼロが省略されることを示します。
DD 2 桁の日 : 01 から 31。[D]D は、1 日から 9 日では先頭のゼロが省略されることを示します。
Mmm 現在のロケールの MonthAbbr プロパティから取得した月の省略形。別の月の省略形 (あるいは長さに制限のない名前) は、$ZDATETIMEmonthlist パラメータとして指定したオプションのリストから取得することができます。以下は 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 Wednesday Thursday Friday Saturday”
nnn 指定された年の日付。常に 3 桁で示され、必要に応じて先頭にゼロが付きます。値は、001 ~ 365 (うるう年の場合は 366) です。

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")

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

dformat の設定

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

dformat が -1、1、4、13、または 15 (数値の日付形式) の場合は、現在のロケールの DateSeparator プロパティの値が $ZDATETIME の月、日、年の区切り文字として使用されます。dformat が 3 の場合は、ODBC の日付区切り文字 (“-”) が使用されます。dformat がそれ以外の値の場合は、空白が日付区切り文字として使用されます。英語での DateSeparator の既定値は “/” で、この区切り文字はすべてのドキュメントで使用されています。

dformat が 11 または 12 (曜日名) で、localeopt=0 または未指定の場合、曜日名の値は現在のロケールのプロパティから得られます。localeopt=1 の場合、曜日名は ODBC ロケールから得られます。ユーザのロケールの既定の曜日名および曜日名の省略形を決定するには、以下の NLS クラス・メソッドを呼び出します。

  WRITE ##class(%SYS.NLS.Format).GetFormatItem("WeekdayName"),!
  WRITE ##class(%SYS.NLS.Format).GetFormatItem("WeekdayAbbr"),!

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 時制) の形式で表します。
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 時間) の形式で表します。"Z" 接尾語は、時刻が現地時間ではなく、協定世界時 (UTC) で表示されていることを示します。
8 時刻を "hh:mmZ" (24 時間) で表します。"Z" 接尾語は、時刻が現地時間ではなく、協定世界時 (UTC) で表示されていることを示します。
9 MultiValue のサポートは、以下のとおりです。0 ~ 86399 の範囲の数値に対する tformat 1 (24 時制の "hh:mm:ss") と同じです。以下で説明するように、負の時刻値および 86399 超の時刻値も受け付けます。
10 MultiValue のサポートは、以下のとおりです。0 ~ 86399 の範囲の数値に対する tformat 2 (24 時制の "hh:mm") と同じです。以下で説明するように、負の時刻値および 86399 超の時刻値も受け付けます。

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

dformat の値が 3、18、19、20、21 以外の場合、すべての時刻形式は既定で現在のロケール定義のTimeSeparator および DecimalSeparator プロパティ値になります。dformat=3 (ODBC の日付形式) および dformat=18、19、20、または 21 (イスラム暦の日付形式) の場合は、現在のロケールのプロパティ値に関係なく、時刻区切り文字はコロン (:) になり、DecimalSeparator はピリオド (.) になります。これらの既定は、localeopt を設定することにより、オーバーライドできます。

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

  WRITE ##class(%SYS.NLS.Format).GetFormatItem("TimeFormat"),!
  WRITE ##class(%SYS.NLS.Format).GetFormatItem("TimeSeparator"),!
  WRITE ##class(%SYS.NLS.Format).GetFormatItem("DecimalSeparator")

tformat 値が (現地時間を返す) 1 から 4 までの場合、日付と時刻はスペースで区切られます。tformat 値が 5 から 8 までの場合、日付と時刻は文字 “T” で区切られます。

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 の場合、$ZDATETIME では、ロケールの既定の設定に関係なく、常に ODBC 標準値を使用します。

ローカル時刻 (tformat 5、6、7、および 8)

tformat を 5 または 6 に設定すると、hdatetime 入力値は現地日時であると想定され、現地日時として表示されます。hdatetime が現在の現地日時 ($HOROLOG) である場合は、$ZTIMEZONE を変更すると、現在のプロセスについてこの現在の日時が変更されます。

オフセット接尾語は、グリニッジ子午線からの正または負のオフセット (時間および分) として、ローカル時刻調整設定を指定します。このローカル時刻調整は、必ずしもタイム・ゾーン・オフセットではありません。例えば、米国東部のタイム・ゾーンはグリニッジ標準時の 5 時間後 (-5:00) ですが、ローカル時刻調整 (サマータイム) によって、このタイム・ゾーンの時刻が 1 時間オフセットされて、-04:00 となります。$ZTIMEZONE を設定すると、$ZDATETIME($HOROLOG,1,5) によって返される現在のプロセスの日時が変更されますが、システムのローカル時刻調整設定は変更されません。

Note:

tformat が 5 または 6 の場合は、UTC 時刻からのローカル時刻調整オフセットが返されます。これは、ローカル・タイム・ゾーン・オフセットでも、ローカル時刻と英国グリニッジのローカル時刻との比較でもありません。グリニッジ標準時 (GMT) という用語は誤解を招くことがあり、英国グリニッジのローカル時刻は、冬期は UTC と一致していますが、夏期は UTC から 1 時間ずれています。これは、英国夏時間と呼ばれるローカル時刻の変更が適用されるためです。

以下の例では、オペレーティング・システムのローカル時刻調整設定によって、および現在のプロセスのタイム・ゾーンの変更によって、tformat の 5 という値がどのような影響を受けるのかを示しています (この例では、ローカル時刻調整の境界がプログラム実行時に発生するかどうかを確認します)。

LocalDatetimeOffset
  SET dst=$SYSTEM.Util.IsDST()
  SET local=$ZDATETIME($HOROLOG,1,5)
  WRITE local," is the local date/time and offset",!!
  SET off=$PIECE(local,"+",2)
  IF off="" {SET off=$PIECE(local,"-",2)
             WRITE "-",off," is local offset",!}
  ELSE {WRITE "+",off," is local offset",!}
  SET tz=$ZTIMEZONE
  WRITE tz/60," is the local timezone offset, in hours",!!
  IF dst=1 {WRITE " DST in effect, ",off," offset is not ",tz/60," time zone offset",!}
    ELSEIF dst=0 {WRITE " DST not in effect, offset ",off,"=timezone ",tz/60,!}
    ELSE {WRITE " DST setting cannot be determined",!}
ChangeTimezoneForCurrentProcess
  SET $ZTIMEZONE=tz+180
  WRITE !,"changed the process time zone westward 3 hours",!
  WRITE $ZDATETIME($HOROLOG,1,5)," is new local date/time and offset",!
  WRITE "note that time has changed, but offset has not changed"
  SET $ZTIMEZONE=tz
ConfirmNoDSTBoundary
  SET dst2=$SYSTEM.Util.IsDST()
  GOTO:dst'=dst2 LocalDatetimeOffset

tformat を 7 または 8 に設定すると、hdatetime 入力値は現地日付および時刻であると想定されます。時刻は対応する UTC 時間に変更されます (ローカル・タイムゾーンの設定を使用して計算)。返される日付も、この UTC 時間値に一致するように変更されます (必要な場合)。そのため、この日付は、現地日付とは異なる場合があります。

Note:

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

  • ローカル時刻から UTC 時刻への変換は、ローカル時刻調整の境界の動作に依存します。この動作は、オペレーティング・システム・プラットフォームごとに異なる可能性があります。

    ローカル時計を進めたとき (サマータイム開始日の “Spring ahead”) は、進めた 1 時間、ローカル時刻が失われます。この “失われた” 1 時間は、不正なローカル時刻値です。Caché の $HOROLOG は、不正なローカル時刻値を決して返してはいけません。ただし、ユーザがこの不正なローカル時刻値を手動で入力した場合は (例えば $HOROLOG を設定することによって)、$ZDATETIME の変換結果は不確定であり、プラットフォームによって大きく左右されます。

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

  • ローカル時刻と UTC 時刻の間の変換では、指定された年と場所に対して適用されているローカル時刻調整ルールが使用される必要があります。これらのルールは現地法によって規定されており、過去に変更された可能性があり、将来に変更される可能性もあるため、$ZDATETIME の変換は、オペレーティング・システム・プラットフォームによってエンコードされているこれらのルールの完全性と正確性に依存します。将来の年の予測では、現在のルールを使用する必要があり、これらのルールは変更される可能性があります。

  • ローカル時刻と UTC 時刻の間の変換は、オペレーティング・システム・プラットフォームでサポートされている日付範囲に依存します。

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

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

Note:

$ZDATETIME には、hdatetime 入力値が UTC 時間か現地時間かを判別する方法がありません。したがって、$ZTIMESTAMP 値などの、もともと UTC である hdatetime では、tformat 値 5、6、7、または 8 を使用しないでください。時間を現地時間に再変換する演算で tformat 7 または 8 変換からの出力を使用する場合は、現地から UTC への変換時に日付が変更されている可能性があることに注意してください。

MultiValue 時刻 (tformat 9 および 10)

時刻形式 9 および 10 は、MultiValue のサポート用に提供されています。これらは、ObjectScript の許容範囲 (0 ~ 86399) 内のすべての時刻値の tformat 1 および 2 と同じです。この範囲内では、秒の小数部は他の時刻形式と同じ方法で処理されます。他の時刻形式のように、-0 は 0 として処理されます。

時刻形式 9 および 10 は、負の数値を受け付けて、対応する負の時刻値を返します。tformat 9 は、"-hh:mm:ss" (24 時制) として負の時刻値を返します。tformat 10 は、"-hh:mm" (24 時制) として負の時刻値を返します。時刻形式 10 の場合は、“-59.9” は “–00:00” を返し、“-60” は “–00:01” を返します。負の秒の小数部は常に切り捨てられます。このため、-4.9 は “–00:00:04” を返し、“-0” と “-0.9” はどちらも正の値 “00:00:00” を返します。

時刻形式 9 および 10 は、86399 より大きな数値を受け入れ、それに対応する時刻を返します。したがって、86400 は “24:00:00”、400000 は “111:06:40” を返します。秒の小数部は、0 ~ 86399 の範囲の値に対して返されます。86400 以上の値に対しては、秒の小数部は切り捨てられます。

precision が指定されていて、Caché 範囲外の時刻値が指定されている場合は、指定された秒の小数部は切り捨てられ、小数部の精度の部分はゼロとして返されます。

precision

時刻を表すのに使用される、秒の小数部の精度を示す小数点以下の桁数を指定する整数値です。つまり、precision の値として 3 を入力すると、$ZDATETIME は秒数を小数点以下 3 桁まで表示します。precision の値として 9 を入力すると、$ZDATETIME は秒数を小数点以下 9 桁まで表示します。返す小数桁数をこの引数で指定します。精度を示す実際の有効桁数は hdatetime ソースによって決まります。例えば、$HOROLOG は小数秒を返しませんが、$ZTIMESTAMP$NOW() は小数秒を返します。

サポートされている値は、以下のとおりです。

現在のロケールの TimePrecision プロパティから、precision値を取得します。既定は 0 です。precision を指定しなければ、これが既定の振る舞いになります。

ゼロ (0) 以上の n の値は、時刻を小数点以下の n 桁まで表すことを示します。

precision は hdatetime 形式に小数点以下の値 ($ZTIMESTAMP 形式) を含めることができ、選択した tformat オプションに秒が含まれている場合にのみ適用されます。末尾のゼロは、抑制されません。指定した有効桁数がシステムで利用できる有効桁数を超えている場合、有効桁数の余分な桁は、末尾のゼロとして返されます。9 の precision が指定された以下の例のように、Normalize()Opens in a new tab メソッドを使用することで、余分な末尾のゼロを抑制できます。

  WRITE $ZDATETIME($ZTIMESTAMP,3,,9),!
  WRITE ##class(%TimeStamp).Normalize($ZDATETIME($ZTIMESTAMP,3,,9))

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

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

ロケールの TimePrecision を任意の桁数 (最大 15 桁) に設定できます。

monthlist

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

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

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

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

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

monthlist を省略するか、monthlist の値として -1 を指定した場合は、現在のロケールの MonthAbbr または MonthName プロパティで定義されている月名のリストが $ZDATETIME で使用されます (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、または 15 を使用して、年を 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 桁の年で表します。

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

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

yearopt を省略するか、yearopt の値として -1 を指定した場合は、現在のロケールの YearOption プロパティが $ZDATETIME で使用されます (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 は、現在の年より前の年数で表される、スライディング・ウィンドウの最初の年を示す数値です。

endwin

日付を 2 桁の年で表すスライディング・ウィンドウの最後を指定する数値です。yearopt が 3 あるいは 5 のとき、endwin をオプションで指定する必要があります。endwin は、その他の yearopt 値では無効になります。

yearopt=3 のとき、endwin はスライディング・ウィンドウの最後の日付を示す $HOROLOG 日付形式の絶対日付です。

yearopt=5 のとき、endwin は、現在の年から後の年数を示すスライディング・ウィンドウの最後の年を示す数値です。

yearopt=5 のとき、スライディング・ウィンドウは常に startwin で指定する年の最初の日付 (1 月 1 日) で開始し、endwin で指定する年の最後の日付 (12 月 31 日) あるいは最後と暗示される年の最後の日付 (endwin が省略されているとき) で終了します。

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 より前の hdatetime 値を指定すると、<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 $ZDATETIME(-13000,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> エラーが発生します。

ODBC 日付形式 (dformat 3)

DateMinimum プロパティの適用は、localeopt 設定によって管理されます。localeopt=1 (dformat=3 の場合の既定) の場合、現在のロケール設定に関係なく、日付の最小値は 0 になります。したがって、ODBC 形式 (dformat=3) では、以下を使用して 1840 年 12 月 31 日よりも前の日付を指定できます。

  • 指定した日付よりも前の mindate を指定します。

      WRITE $ZDATETIME(-30,3,,,,,,,-365)
  • 指定した日付よりも前の DateMinimum プロパティ値を指定し、localeopt=0 を設定します。

      DO ##class(%SYS.NLS.Format).SetFormatItem("DateMinimum",-365)
      WRITE $ZDATETIME(-30,3,,,,,,,,,,0)

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) の最大日付は $HOROLOG 2781687 で、これは BE 9999 年 12 月 31 日に対応します。

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

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

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

erropt

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

  • 検証:Caché は、hdatetime に対してキャノニック数値変換を実行します。hdatetime の日付と時刻の部分は別々に解析されます。日付/時刻区切り文字として検出された最初のコンマを解析します。追加のコンマは、数値以外の文字として処理されます。

    hdatetime 文字列の各部分の解析は、数値以外の最初の文字で停止します。したがって、64687AD,1234SECS などの hdatetime は、64687,1234 と同じです。数値以外の日付または時刻部分 (NULL 文字列を含む) は 0 に評価されます。したがって、hdatetime が空の文字列の場合は、$HOROLOG の最初の日付 (12/31/1840) が返されます。

    ただし、日付部分の値が整数に評価されない (ゼロ以外の小数を含む) 場合、<ILLEGAL VALUE> エラーが発生します。

  • 範囲:hdatetime の日付部分は mindate から maxdate までの範囲内の整数に評価される必要があります。既定では、2980013 を超える日付値または 0 未満の日付値は <VALUE OUT OF RANGE> エラーを生成します。mindate を負の数値に設定すると、1840 年 12 月 31 日より前の有効な日付の範囲を拡張できます。ただし、dformat 18、19、20、または 21 (ヒジュラ・イスラム暦) の日付の場合、-445031 より前の日付は、mindate がより早い日付に設定されていても、<ILLEGAL VALUE> エラーを生成します。

    hdatetime の時刻部分に 86399 より大きい値を指定すると、<ILLEGAL VALUE> エラーが生成されます。負の hdatetime 時刻値を指定すると、<ILLEGAL VALUE> エラーが生成されます。

erropt パラメータは、hdatetime の無効な値または範囲外の値が原因で生成されるエラーのみを抑制します。他のパラメータの無効な値、または範囲外の値が原因で発生したエラーについては、erropt が指定されているかどうかに関係なく、常にエラーが生成されます。例えば、$ZDATETIMEendwinstartwin より前になる値のスライディング・ウィンドウを指定すると、常に <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" です。

以下の例は、現在の現地日付と現地時刻を表示します。また、ロケールの既定の日付および時刻形式を取ります。

  WRITE $ZDATETIME($HOROLOG)

以下の例は、現在の日付と時刻を表示します。$ZTIMESTAMP には、現在の日付値と時刻値が協定世界時 (UTC) 日付/時刻として含まれます。dformat パラメータは ODBC 日付形式を指定し、tformat パラメータは 24 時間制を指定し、precision パラメータは 6 桁の小数秒の有効桁数を指定します。

  WRITE $ZDATETIME($ZTIMESTAMP,3,1,6)

2005-11-25 18:45:16.960000 のようにフォーマットされた、現在のタイムスタンプ日付と時刻を返します。

以下の例は、現地時間を UTC 時間に変換する方法と、その変換結果によりどのように日付が変更されるかを示します。ほとんどのタイム・ゾーンにおいて、以下の $ZDATETIME 演算のいずれかで、時間変換により日付変更が生じます。

  SET local = $ZDATETIME("60219,82824",3,1)
  SET utcwest = $ZDATETIME("60219,82824",3,7)
  SET utceast = $ZDATETIME("60219,00024",3,7)
  WRITE !,local,!,utcwest,!,utceast

メモ

$ZDATETIME で無効な値

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

  • 無効な dformat コード (-3 未満または 17 より大きい整数値、0、整数以外の値) を指定した場合。

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

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

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

  • 日付または時刻に無効な値を指定して、erropt 値を提供しない場合。

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

  • maxdatemindate よりも小さい場合。

  • endwinstartwin よりも小さい場合。

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

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

  • maxdatemindate に想定される値によって定義された範囲外にある、範囲内にあれば有効であった日付を指定し、erropt 値を指定しない場合。

日付と時刻の既定値のカスタマイズ

Caché の起動時、既定の日付および時刻の形式は、アメリカの日付および時刻形式 (例えば MM/DD/[YY]YY) に初期化されています。この形式およびその他の既定の形式を現在のロケール用に設定するには、SET ^SYS("NLS","Config","LocaleFormat")=1 のグローバル変数を設定します。これは、すべてのプロセスのすべての既定の形式を現在のロケール値に設定します。これらの既定は、このグローバルが変更されるまで維持されます。

Note:

ここでは、localeopt が未定義または 0 に設定されているときに適用されるユーザ・ロケール定義について説明します。localeopt=1 の場合、$ZDATETIME は、定義済みの ODBC ロケールを使用します。

以下の例で、最初の $ZDATETIME は、ロケールの既定形式で日付と時刻を返します。入力パラメータは、$ZTIMESTAMP 特殊変数、既定の dformat パラメータと tformat パラメータ、および 2 小数桁に設定された precision です。ほとんどのロケールでは、最初の $ZDATETIME は、dformat=1 または、日付の区切り文字にスラッシュ、秒の小数部用の小数点区切り文字にドットを使用したアメリカ形式の日付と時刻を返します。

ChangeVals セクションでは、最初の SetFormatItem()Opens in a new tab メソッドは、2 つ目の $ZDATETIME で示されるように、ロケールの日付形式の既定値を dformat=4、またはヨーロッパ日付形式 (DD/MM/[YY]YY) に変更します。2 つ目の SetFormatItem() メソッドは、(dformat が -1、1、4、および 15 の場合に影響する) 日付区切り文字に対するロケールの既定値を変更します。この例では、3 つ目の $ZDATETIME で示されるように、日付区切り文字は、ドット (".") に設定されています。3 番目の SetFormatItem() メソッドは、最後の $ZDATETIME で示されるように、このロケールの小数点区切り文字をヨーロッパ標準 (“,”) に変更します。その後、このプログラムは日付形式の初期値をリストアします。

InitalizeLocaleFormat
   SET ^SYS("NLS","Config","LocaleFormat")=1
InitialVals
   SET fmt=##class(%SYS.NLS.Format).GetFormatItem("DateFormat")
   SET sep=##class(%SYS.NLS.Format).GetFormatItem("DateSeparator")
   SET dml=##class(%SYS.NLS.Format).GetFormatItem("DecimalSeparator")
   WRITE !,$ZDATETIME($ZTIMESTAMP,,,2)
ChangeVals
  SET x=##class(%SYS.NLS.Format).SetFormatItem("DateFormat",4)
  WRITE !,$ZDATETIME($ZTIMESTAMP,,,2)
  SET y=##class(%SYS.NLS.Format).SetFormatItem("DateSeparator",".")
  WRITE !,$ZDATETIME($ZTIMESTAMP,,,2)
  SET z=##class(%SYS.NLS.Format).SetFormatItem("DecimalSeparator",",")
  WRITE !,$ZDATETIME($ZTIMESTAMP,,,2)
RestoreVals
   SET x=##class(%SYS.NLS.Format).SetFormatItem("DateFormat",fmt)
   SET y=##class(%SYS.NLS.Format).SetFormatItem("DateSeparator",sep)
   SET z=##class(%SYS.NLS.Format).SetFormatItem("DecimalSeparator",dml)
   WRITE !,$ZDATETIME($ZTIMESTAMP,,,2)

$ZDATE と $ZDATETIME

$ZDATETIME$ZDATE に類似しています。$ZDATETIME は、日付と時刻を組み合わせた値を変換するのに対し、$ZDATE は、日付値のみを変換します。次に例を示します。

  WRITE $ZDATE($HOROLOG)

03/25/2011 のようにフォーマットされた、現在の日付を返します。

  WRITE $ZDATETIME($HOROLOG)

03/25/2011 13:53:57 のようにフォーマットされた、現在の日付と時刻を返します。

$ZDATE は、5 から 8 までの tformat 値をサポートしていません。

関連項目

FeedbackOpens in a new tab