第八十三章 Caché 函數(shù)大全 $ZDATE 函數(shù)
驗(yàn)證日期并將其從內(nèi)部格式轉(zhuǎn)換為指定的顯示格式。
大綱
$ZDATE(hdate,dformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt,localeopt)
$ZD(hdate,dformat,monthlist,yearopt,startwin,endwin,mindate,maxdate,erropt,localeopt)
參數(shù)
- hdate 一個(gè)整數(shù),指定內(nèi)部日期格式的值。該整數(shù)表示自1840年12月31日以來(lái)經(jīng)過(guò)的天數(shù)。如果將
$HOROLOG指定為hdate,則僅使用$HOROLOG的日期部分。請(qǐng)參閱下面的hdate。 - dformat 可選—一個(gè)整數(shù)代碼,指定返回日期的格式。請(qǐng)參閱下面的dformat。
- monthlist 可選-字符串或變量名稱,用于指定一組月份名稱。該字符串必須以分隔符開(kāi)頭,并且其12個(gè)條目必須由該分隔符分隔。請(qǐng)參閱下面的月列表。
- yearopt 可選—整數(shù)代碼,用于指定是將年表示為兩位數(shù)字還是四位數(shù)字的值。請(qǐng)參閱下面的yearopt。
- startwin 可選-滑動(dòng)窗口的開(kāi)始,在此期間,日期必須用兩位數(shù)的年份表示。請(qǐng)參閱下面的startwin。
- endwin 可選-滑動(dòng)窗口的末尾,其間用兩位數(shù)的年份表示日期。請(qǐng)參閱下面的endwin。
- mindate 可選-有效日期范圍的下限。指定為
$HOROLOG整數(shù)日期計(jì)數(shù),0表示1840年12月31日??梢灾付檎麛?shù)或負(fù)整數(shù)。請(qǐng)參閱下面的提示。 - maxdate 可選-有效日期范圍的上限。指定為
$HOROLOG整數(shù)日期計(jì)數(shù)。請(qǐng)參閱下面的maxdate。 - erropt 可選-當(dāng)hdate無(wú)效時(shí)返回的表達(dá)式。為該參數(shù)指定值將抑制與無(wú)效或超出范圍的hdate值相關(guān)的錯(cuò)誤代碼。
$ZDATE而不是發(fā)出錯(cuò)誤消息,而是返回erropt。請(qǐng)參閱下面的錯(cuò)誤提示。 - localeopt 可選-布爾值標(biāo)志,用于指定dformat,monthlist,yearopt,minate和maxdate默認(rèn)值以及其他日期特征(例如日期分隔符)使用的語(yǔ)言環(huán)境:
localeopt = 0:當(dāng)前的語(yǔ)言環(huán)境屬性設(shè)置確定這些參數(shù)默認(rèn)值。localeopt = 1:ODBC標(biāo)準(zhǔn)語(yǔ)言環(huán)境確定這些參數(shù)默認(rèn)值。未指定localeopt:dformat值確定這些參數(shù)默認(rèn)值。如果dformat = 3,則使用ODBC默認(rèn)值。日文和回教日期dformatvalues使用其自己的默認(rèn)值。對(duì)于所有其他dformat值,當(dāng)前的語(yǔ)言環(huán)境屬性設(shè)置用作默認(rèn)值。請(qǐng)參閱下面的localeopt。
指定參數(shù)值之間的省略參數(shù)由占位符逗號(hào)指示。末尾的占位符逗號(hào)不是必需的,但允許使用。逗號(hào)之間允許有空格,以指示省略的參數(shù)。
描述
$ZDATE函數(shù)將內(nèi)部存儲(chǔ)格式($HOROLOG格式)的指定日期轉(zhuǎn)換為幾種備用日期顯示格式之一。 $ZDATE返回的值取決于使用的參數(shù)。
簡(jiǎn)單的$ZDATE格式
$ZDATE(hdate)是$ZDATE的最基本形式,它以與指定hdate對(duì)應(yīng)的顯示格式返回日期。 hdate是自1840年12月31日起經(jīng)過(guò)的天數(shù)的整數(shù)。范圍從0到2980013(從12/31/1840到12/31/9999)。
默認(rèn)情況下,$ZDATE(hdate)用兩位數(shù)字表示1900年到1999年之間的年份。它用四位數(shù)字表示1900年之前或1999年之后的年份。例如:
/// d ##class(PHA.TEST.Function).ZDATE()
ClassMethod ZDATE()
{
WRITE $ZDATE(21400),! ; returns 08/04/1899
WRITE $ZDATE(50000),! ; returns 11/23/77
WRITE $ZDATE(60000),! ; returns 04/10/2005
WRITE $ZDATE(0),! ; returns 12/31/1840
}
DHC-APP> d ##class(PHA.TEST.Function).ZDATE()
08/04/1899
11/23/77
04/10/2005
12/31/1840
當(dāng)提供$HOROLOG日期到$ZDATE時(shí),僅使用日期部分。以$HOROLOG格式,日期和時(shí)間顯示為兩個(gè)整數(shù),中間用逗號(hào)分隔。遇到逗號(hào)(非數(shù)字字符)時(shí),$ZDATE會(huì)忽略字符串的其余部分。在以下示例中,$ZDATE使用$HOROLOG格式值返回04/10/2005和當(dāng)前日期:
DHC-APP>WRITE !,$ZDATE("60000,12345")
04/10/2005
DHC-APP>WRITE !,$ZDATE($HOROLOG)
11/06/2020
可自定義日期默認(rèn)
在Caché啟動(dòng)時(shí),默認(rèn)日期格式被初始化為dformat = 1,這是帶有斜杠日期分隔符(MM / DD / [YY] YY)的美國(guó)日期格式。要將此格式和其他默認(rèn)格式設(shè)置為當(dāng)前語(yǔ)言環(huán)境的值,請(qǐng)?jiān)O(shè)置以下全局變量:SET ^SYS("NLS","Config","LocaleFormat")=1。這會(huì)將所有進(jìn)程的所有格式默認(rèn)值設(shè)置為當(dāng)前語(yǔ)言環(huán)境值。這些默認(rèn)值將一直保留到更改此全局變量為止。
注意:本節(jié)介紹未定義localeopt或?qū)⑵湓O(shè)置為0時(shí)應(yīng)用的用戶語(yǔ)言環(huán)境定義。當(dāng)localeopt = 1時(shí),$ZDATE使用預(yù)定義的ODBC語(yǔ)言環(huán)境。
可以使用NLS(國(guó)家語(yǔ)言支持)覆蓋當(dāng)前進(jìn)程的格式默認(rèn)值??梢詫⑺懈袷降哪J(rèn)值更改為指定語(yǔ)言環(huán)境的值,也可以更改單個(gè)格式的值。
- 要將所有格式默認(rèn)值(包括日期格式默認(rèn)值)設(shè)置為指定語(yǔ)言環(huán)境的屬性,請(qǐng)調(diào)用以下方法調(diào)用:
SET fmt=##class(%SYS.NLS.Format).%New("lname"),其中l(wèi)name是所需語(yǔ)言環(huán)境的NLS名稱。 (例如,deuw =German,espw = Spanish,fraw = French,ptbw = Brazilian Portuguese,rusw = Russian,jpnw = Japanese。在管理門(mén)戶中找到完整的語(yǔ)言環(huán)境列表:System,Configuration,NLS Settings,Locale Definitions )要將這些默認(rèn)設(shè)置設(shè)置為當(dāng)前語(yǔ)言環(huán)境的屬性,請(qǐng)指定lname為“ current”或空字符串(“”)。 - 要將默認(rèn)日期格式設(shè)置為指定的dformat格式,請(qǐng)調(diào)用
SetFormatItem()方法:SET rtn=##class(%SYS.NLS.Format).SetFormatItem("DateFormat",n),其中n是希望將其設(shè)為默認(rèn)值的dformat值。
下面的示例演示如何將所有格式默認(rèn)設(shè)置為俄語(yǔ)語(yǔ)言環(huán)境,以默認(rèn)格式(俄語(yǔ))從$ZDATE返回日期,然后將格式默認(rèn)值重置為當(dāng)前語(yǔ)言環(huán)境默認(rèn)值。請(qǐng)注意,俄語(yǔ)語(yǔ)言環(huán)境使用句點(diǎn)而不是斜杠作為日期部分分隔符:
/// d ##class(PHA.TEST.Function).ZDATE1()
ClassMethod ZDATE1()
{
IF $SYSTEM.Version.IsUnicode() {
WRITE !,$ZDATE($HOROLOG)
SET fmt=##class(%SYS.NLS.Format).%New("rusw")
WRITE !,$ZDATE($HOROLOG)
SET fmt=##class(%SYS.NLS.Format).%New("current")
WRITE !,$ZDATE($HOROLOG)
} ELSE {
WRITE "此示例需要Caché的Unicode安裝"
}
}
DHC-APP>d ##class(PHA.TEST.Function).ZDATE1()
11/06/2020
06.11.2020
11/06/2020
下面的示例演示如何設(shè)置各個(gè)格式的默認(rèn)值。第一個(gè)$ZDATE以默認(rèn)格式返回日期。第一個(gè)SetFormatItem()方法將默認(rèn)值更改為dformat = 4或歐洲日期格式(DD / MM / [YY] YY),如第二個(gè)$ZDATE所示。第二個(gè)SetFormatItem()方法更改日期分隔符的默認(rèn)值(這會(huì)影響dformat -1、1、4和15)。在此示例中,日期分隔符字符設(shè)置為點(diǎn)(“?!?/code>),如第三個(gè)$ZDATE所示。最后,該程序?qū)⑦€原原始日期格式值:
/// d ##class(PHA.TEST.Function).ZDATE2()
ClassMethod ZDATE2()
{
InitialVals
SET fmt=##class(%SYS.NLS.Format).GetFormatItem("DateFormat")
SET sep=##class(%SYS.NLS.Format).GetFormatItem("DateSeparator")
WRITE !,$ZDATE($HOROLOG)
ChangeVals
SET x=##class(%SYS.NLS.Format).SetFormatItem("DateFormat",3)
WRITE !,$ZDATE($HOROLOG)
SET y=##class(%SYS.NLS.Format).SetFormatItem("DateSeparator",".")
WRITE !,$ZDATE($HOROLOG)
RestoreVals
SET x=##class(%SYS.NLS.Format).SetFormatItem("DateFormat",fmt)
SET y=##class(%SYS.NLS.Format).SetFormatItem("DateSeparator",sep)
WRITE !,$ZDATE($HOROLOG)
}
DHC-APP>d ##class(PHA.TEST.Function).ZDATE2()
11/06/2020
2020-11-06
2020-11-06
11/06/2020
參數(shù)
hdate
內(nèi)部日期格式值,表示自1840年12月31日以來(lái)經(jīng)過(guò)的天數(shù)。默認(rèn)情況下,它必須是0到2980013之間的整數(shù)。可以將hdate指定為數(shù)字,字符串文字或表達(dá)式。 Caché將hdate轉(zhuǎn)換為規(guī)范形式。它會(huì)在其第一個(gè)非數(shù)字字符處截?cái)鄶?shù)字字符串(例如$HOROLOG值)。它將非數(shù)字字符串評(píng)估為整數(shù)0。不解析為整數(shù)的浮點(diǎn)數(shù)將生成<ILLEGAL VALUE>錯(cuò)誤。
默認(rèn)情況下,最早的有效hdate為0(1840年12月31日)。默認(rèn)有效日期范圍是0到2980013(含),包括從12/31/1840到12/31/9999的日期。默認(rèn)情況下,日期限制為正整數(shù),因?yàn)镈ateMinimum屬性默認(rèn)為0。如果當(dāng)前語(yǔ)言環(huán)境的DateMinimum屬性設(shè)置為更大或等于負(fù)整數(shù),則可以將較早的日期指定為負(fù)整數(shù)。有效的最低DateMinimum值的最低值是-672045,對(duì)應(yīng)于0001年1月1日。Caché使用了多功的格里高利歷,將格里高利歷回溯到“ Year 1”,符合ISO 8601標(biāo)準(zhǔn)。這在一定程度上是因?yàn)楣珰v是在不同國(guó)家的不同時(shí)間采用的。例如,許多歐洲大陸在1582年采用了它;大不列顛及美國(guó)在1752年采用了它。因此,當(dāng)?shù)夭捎酶窭锔呃麣v之前的Caché日期可能與根據(jù)當(dāng)時(shí)有效的當(dāng)?shù)貧v法記錄的歷史日期不符。有關(guān)1840年之前的日期的更多詳細(xì)信息,請(qǐng)參考mindate參數(shù)。
CachéSQL支持Caché配置設(shè)置ZDateNULL。
- 當(dāng)
ZDateNULL = OFF(默認(rèn)值)時(shí),無(wú)效和超出范圍的hdate值的行為以及由此產(chǎn)生的錯(cuò)誤如erropt參數(shù)中所述。 - 當(dāng)
ZDateNULL = ON時(shí),無(wú)效和超出范圍的hdate值的行為以及由此產(chǎn)生的錯(cuò)誤如下:- 有效日期范圍是從1到94232(含),包括從01/01/1841到12/30/2098的日期。該日期范圍是為具有三個(gè)或更少參數(shù)的任何
$ZDATE函數(shù)調(diào)用設(shè)置的。如果$ZDATE函數(shù)調(diào)用具有三個(gè)以上的參數(shù),則有效的日期范圍是從mindate和maxdate參數(shù)(如果指定)中獲取的,或者從為當(dāng)前語(yǔ)言環(huán)境建立的日期范圍中獲取。 - 無(wú)效的日期值將返回空字符串(
“”),而不是發(fā)出錯(cuò)誤。
- 有效日期范圍是從1到94232(含),包括從01/01/1841到12/30/2098的日期。該日期范圍是為具有三個(gè)或更少參數(shù)的任何
dformat
返回日期的格式。有效值為:
| 值 | 含義 |
|---|---|
| 1 | MM/DD/[YY]YY(07/01/97或03/27/2002)-美國(guó)數(shù)字格式。日期分隔符(/或.)。取自當(dāng)前區(qū)域設(shè)置。 |
| 2 | DD Mmm [ YY ]YY (01 Jul 97 or 27 Mar 2002) |
| 3 | YYYY-MM-DD (1997-07-01 or 2002-03-27) ODBC格式。默認(rèn)情況下,此格式與當(dāng)前的語(yǔ)言環(huán)境設(shè)置(localeopt = 1)無(wú)關(guān),從而以O(shè)DBC標(biāo)準(zhǔn)交換格式指定日期。要以這種格式使用當(dāng)前的日期語(yǔ)言環(huán)境設(shè)置,請(qǐng)?jiān)O(shè)置localeopt = 0。 |
| 4 | DD/MM/[YY]YY (01/07/97 or 27/03/2002) 歐洲數(shù)字格式。日期分隔符(/或。)取自當(dāng)前的語(yǔ)言環(huán)境設(shè)置。 |
| 5 | Mmm [D]D, YYYY (Jul 1, 1997 or Mar 27, 2002) |
| 6 | Mmm [D]D YYYY (Jul 1 1997 or Mar 27 2002) |
| 7 | Mmm DD [YY]YY (Jul 01 97 or Mar 27 2002) |
| 8 | YYYYMMDD (19970701 or 20020327) 數(shù)值格式 |
| 9 | Mmmmm [D]D, YYYY (July 1, 1997 or March 27, 2002) |
| 10 | W(2)-一周中的天數(shù),從0(星期日)到6(星期六)編號(hào)。與$SYSTEM.SQL.DAYOFWEEK()方法進(jìn)行比較。 |
| 11 | Www(Tue)-縮寫(xiě)的日期名稱 |
| 12 | Wwwwww (Tuesday))—全天名稱 |
| 13 | [D]D/[M]M/YYYY (1/7/2549 or 27/11/2549) 泰文日期格式。除無(wú)前導(dǎo)零外,日和月與歐洲用法相同。該年是佛教時(shí)代(BE)年,通過(guò)在公歷年中增加543年而得出。 |
| 14 | nnn(354)-年的天數(shù) |
| 15 | DD/MM/[YY]YY (01/07/97 or 27/03/2002) 歐洲格式(與dformat = 4相同)。日期分隔符(/或。)取自當(dāng)前的語(yǔ)言環(huán)境設(shè)置。 |
| 16 | YYYYc[M]Mc[D]Dc —日文日期格式。年,月和日的編號(hào)與其他日期格式相同;前導(dǎo)零被省略。在年,月和日編號(hào)之后插入“年”,“月”和“日”的日語(yǔ)字符(在此處顯示為c)。這些字符是Year = $CHAR(24180),Month = $CHAR(26376)和Day = $CHAR(26085)。 |
| 17 | YYYYc [M]Mc [D]Dc —日文日期格式。與dformat 16相同,除了在“ year”和“ month”日語(yǔ)字符之后插入空格。 |
| 18 | [D]D Mmmmm YYYY - 具有完整月份名稱的表格回歷(伊斯蘭)日期格式。省略了日期前導(dǎo)零。包括年份前導(dǎo)零。教堂日期-445031(公元07/19/0622)= 1穆罕默德0001。 |
| 19 | [D]D [M]M YYYY 帶月號(hào)的表格回歷(伊斯蘭)日期格式。日和月的前導(dǎo)零被省略;包括年份前導(dǎo)零。教堂日期-445031(西元07/19/0622)= 1 1 0001。 |
| 20 | [D]D Mmmmm YYYY —觀察到的回歷(伊斯蘭)日期格式,并帶有完整的月份名稱。默認(rèn)為表格回歷(dformat 18)。要覆蓋表格計(jì)算,請(qǐng)使用%Calendar.Hijri類添加對(duì)新月新月的觀測(cè)。 |
| 21 | [D]D [M]M YYYY —觀察到的回歷(伊斯蘭)日期格式和月數(shù)。默認(rèn)為表格回歷(dformat 19)。要覆蓋表格計(jì)算,請(qǐng)使用%Calendar.Hijri類添加對(duì)新月新月的觀測(cè)。 |
| -1 | 從用戶的語(yǔ)言環(huán)境(如果localeopt = 0或未定義)或從ODBC語(yǔ)言環(huán)境(默認(rèn)為dformat = 3)獲取有效的dformat值。如果dformat是從用戶的語(yǔ)言環(huán)境中獲取的,則它是fmt.DateFormat的值,其中fmt是與當(dāng)前進(jìn)程關(guān)聯(lián)的## class(%SYS.NLS.Format)的實(shí)例。如果不指定dformat,則這是默認(rèn)行為。 |
其中
| 語(yǔ)法 | 含義 |
|---|---|
| YYYY | YYYY是四位數(shù)的年份。 [YY]如果hdate落在活動(dòng)窗口內(nèi)達(dá)兩位數(shù)年份,則YY為兩位數(shù)年份;否則為四位數(shù)年份。 |
| MM | 兩位數(shù)的月份:01到12。[M] M表示在月份1到9中省略了前導(dǎo)零。 |
| DD | 兩位數(shù)的日期:01到31。[D] D表示第1到9天省略了前導(dǎo)零。 |
| Mmm | 從當(dāng)前語(yǔ)言環(huán)境的MonthAbbr屬性中提取的月份縮寫(xiě)。可以從指定為$ ZDATE的monthlist參數(shù)的可選列表中提取備用月份的縮寫(xiě)(或任何長(zhǎng)度的名稱)。 MonthAbbr的默認(rèn)值是:“Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec” |
| Mmmmm | 由當(dāng)前語(yǔ)言環(huán)境的MonthName屬性指定的月份的全名。默認(rèn)值為:“January February March ... November December” |
| W | 數(shù)字0-6表示星期幾:Sunday=0, Monday=1, Tuesday=2, etc. |
| Www | 工作日名稱縮寫(xiě),由當(dāng)前語(yǔ)言環(huán)境的WeekdayAbbr屬性指定。默認(rèn)值為:“Sun Mon Tue Wed Thu Fri Sat” |
| Wwwwww | 由當(dāng)前語(yǔ)言環(huán)境的WeekdayName屬性指定的工作日全名。默認(rèn)值為:“Sunday Monday Tuesday ... Friday Saturday” |
| nnn | 指定年份的天數(shù),始終為三位數(shù),如有必要,前導(dǎo)零。值是001到365(leap年時(shí)是366)。 |
dformat Default
如果省略dformat或?qū)⑵湓O(shè)置為-1,則dformat的默認(rèn)值取決于localeopt參數(shù)和NLS DateFormat屬性:
- 如果
localeopt = 1,則dformat的默認(rèn)值為ODBC格式。 monthlist,yearopt,mindate和maxdate參數(shù)的默認(rèn)值也設(shè)置為ODBC格式。這與設(shè)置dformat = 3相同。 - 如果
localeopt = 0或未指定,則dformat默認(rèn)值來(lái)自NLS DateFormat屬性。如果DateFormat = 3,則dformat的默認(rèn)值為ODBC格式。但是,DateFormat = 3不會(huì)影響在當(dāng)前NLS語(yǔ)言環(huán)境定義中指定的monthlist,yearopt,mindate和maxdate參數(shù)默認(rèn)值。
若要確定語(yǔ)言環(huán)境的默認(rèn)日期格式,請(qǐng)調(diào)用GetFormatItem()NLS類方法:
WRITE ##class(%SYS.NLS.Format).GetFormatItem("DateFormat")
歐洲日期格式(dformat = 4,DD / MM / YYYY順序)是許多(但不是全部)歐洲語(yǔ)言的默認(rèn)格式,包括英式英語(yǔ),法語(yǔ),德語(yǔ),意大利語(yǔ),西班牙語(yǔ)和葡萄牙語(yǔ)(使用“ /”日期分隔符)字符),以及捷克語(yǔ)(csyw),俄語(yǔ)(rusw),斯洛伐克語(yǔ)(skyw),斯洛文尼亞語(yǔ)(svnw)和烏克蘭語(yǔ)(ukrw)(使用“?!?DateSeparator字符)。
dformat Settings
如果dformat為3(ODBC日期格式),則ODBC格式默認(rèn)值也用于monthlist,yearopt,minate和maxdate參數(shù)默認(rèn)值。當(dāng)前的語(yǔ)言環(huán)境默認(rèn)值將被忽略。
如果dformat為-1、1、4、13或15(數(shù)字日期格式),則$ZDATE使用當(dāng)前語(yǔ)言環(huán)境的DateSeparator屬性的值作為月,日和年之間的分隔符。當(dāng)dformat為3時(shí),使用ODBC日期分隔符(“-”)。對(duì)于所有其他dformat值,空格用作日期分隔符。 DateSeparator的英語(yǔ)默認(rèn)值為“ /”,并且所有文檔都使用此分隔符。
如果dformat是11或12(日期名稱)且localeopt = 0或未指定,則日期名稱值來(lái)自當(dāng)前的語(yǔ)言環(huán)境屬性。如果localeopt = 1,則日期名稱來(lái)自O(shè)DBC語(yǔ)言環(huán)境。若要確定語(yǔ)言環(huán)境的默認(rèn)工作日名稱和工作日縮寫(xiě),請(qǐng)調(diào)用以下NLS類方法:
WRITE ##class(%SYS.NLS.Format).GetFormatItem("WeekdayName"),!
WRITE ##class(%SYS.NLS.Format).GetFormatItem("WeekdayAbbr"),!
如果dformat為16或17(日語(yǔ)日期格式),則返回的日期格式與語(yǔ)言環(huán)境設(shè)置無(wú)關(guān)??梢詮娜魏蜺nicodeCaché實(shí)例返回日語(yǔ)格式的日期。在8位Caché實(shí)例上,將dformat指定為16或17會(huì)導(dǎo)致錯(cuò)誤。
如果dformat為18、19、20或21(伊斯蘭日期格式)且未指定localeopt,則參數(shù)默認(rèn)為伊斯蘭默認(rèn)值,而不是當(dāng)前的語(yǔ)言環(huán)境默認(rèn)值。 monthlist參數(shù)默認(rèn)為阿拉伯語(yǔ)月份名稱,并用拉丁字符音譯。 tformat,yearopt,mindate和maxdate參數(shù)默認(rèn)為ODBC默認(rèn)值。日期分隔符默認(rèn)為回教默認(rèn)值(一個(gè)空格),而不是ODBC默認(rèn)值或當(dāng)前區(qū)域設(shè)置的DateSeparator屬性值。如果localeopt = 0,則將當(dāng)前語(yǔ)言環(huán)境屬性默認(rèn)值用于這些參數(shù)。如果localeopt = 1,則將ODBC默認(rèn)值用于這些參數(shù)。
monthlist
該表達(dá)式可解析為月份名稱或月份名稱縮寫(xiě)的字符串,以分隔符分隔。 monthlist中的名稱替換了來(lái)自當(dāng)前語(yǔ)言環(huán)境的MonthAbbr屬性的默認(rèn)月份縮寫(xiě)值或來(lái)自MonthName屬性的月份名稱值。
僅當(dāng)dformat為2、5、6、7、9、18或20時(shí),monthlist才有效。如果dformat為任何其他值,$ZDATE將忽略monthlist。
月列表字符串具有以下格式:
字符串的第一個(gè)字符是定界符(通常為空格)。同一分隔符必須出現(xiàn)在月份列表的第一個(gè)月份名稱之前和每個(gè)月份名稱之間。可以指定任何單字符定界符;該分隔符出現(xiàn)在返回日期值的月,日和年部分之間,這就是為什么通常使用空格作為首選字符的原因。
月份名稱字符串應(yīng)包含十二個(gè)分隔值,分別對(duì)應(yīng)于一月到十二月??梢灾付ǘ嘤诨蛏儆谑€(gè)月的名稱,但是如果沒(méi)有對(duì)應(yīng)于hdate中月份的月份名稱,則會(huì)生成
<ILLEGAL VALUE>錯(cuò)誤。
如果省略monthlist或?qū)onthlist值指定為-1,則$ZDATE使用在當(dāng)前語(yǔ)言環(huán)境的MonthAbbr或MonthName屬性中定義的月份名稱列表,除非滿足以下條件之一:如果localeopt = 1,則月份列表默認(rèn)值為ODBC月列表(英文)。如果未指定localeopt且dformat為18或20(伊斯蘭日期格式),則月列表默認(rèn)值為伊斯蘭月份列表(使用拉丁字母表示的阿拉伯名稱),忽略MonthAbbr或MonthName屬性值。
若要確定語(yǔ)言環(huán)境的默認(rèn)月份名稱和月份縮寫(xiě),請(qǐng)調(diào)用GetFormatItem()NLS類方法:
DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("MonthAbbr"),!
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("MonthName"),!
January February March April May June July August September October November December
以下示例列出了月份名稱的默認(rèn)語(yǔ)言環(huán)境,將此過(guò)程的語(yǔ)言環(huán)境更改為俄語(yǔ)語(yǔ)言環(huán)境,然后列出了俄語(yǔ)月份名稱并顯示了帶有俄語(yǔ)月份名稱的當(dāng)前日期。然后,它將語(yǔ)言環(huán)境默認(rèn)值恢復(fù)為當(dāng)前語(yǔ)言環(huán)境,并再次顯示當(dāng)前日期,這次是默認(rèn)的月份名稱。
/// d ##class(PHA.TEST.Function).ZDATE4()
ClassMethod ZDATE4()
{
WRITE ##class(%SYS.NLS.Format).GetFormatItem("MonthName"),!
SET fmt=##class(%SYS.NLS.Format).%New("rusw")
WRITE fmt.MonthName,!
WRITE $ZDATE($HOROLOG,9),!
SET fmt=##class(%SYS.NLS.Format).%New()
WRITE $ZDATE($HOROLOG,9)
}
yearopt
使用dformat值1、2、4、7或15,這是一個(gè)整數(shù)代碼,用于指定將年顯示為兩位數(shù)值的時(shí)間窗口。對(duì)于所有其他dformat值,將忽略yearopt。有效的yearopt值為:
| 值 | 描述 |
|---|---|
| -1 | 從當(dāng)前語(yǔ)言環(huán)境的YearOption屬性獲取有效的yearopt值,該值默認(rèn)為0。如果未指定yearopt,則這是默認(rèn)行為。 |
| 0 | 除非有效的過(guò)程特定的滑動(dòng)窗口(通過(guò)%DATE實(shí)用程序建立),否則用兩位數(shù)的年份表示20世紀(jì)日期(1900年至1999年),而所有其他日期則用4位年份表示。如果這樣的窗口有效,則僅將落在滑動(dòng)窗口中的那些日期表示為兩位數(shù)年份,而將所有其他日期表示為四位數(shù)年份。 |
| 1 | 代表20世紀(jì)的日期用兩位數(shù)的年份表示,其他所有日期用4位數(shù)的年份表示。 |
| 2 | 用兩位年份表示所有日期。 |
| 3 | 這些日期用兩位數(shù)的年份表示由startwin和(可選)endwin定義的滑動(dòng)時(shí)間范圍內(nèi)的日期。用四位數(shù)字的年份表示所有其他日期。當(dāng)yearopt = 3時(shí),startwin和endwin是$HOROLOG格式的絕對(duì)日期。 |
| 4 | 用四位數(shù)年份表示所有日期。 ODBC年選項(xiàng)。 |
| 5 | 用兩位數(shù)年份表示所有日期,它們都落在startwin和(可選)endwin定義的滑動(dòng)時(shí)間窗口內(nèi)。用四位數(shù)字的年份表示所有其他日期。當(dāng)yearopt = 5時(shí),startwin和endwin是相對(duì)年份。 |
| 6 | 用兩位數(shù)字年份代表當(dāng)前世紀(jì)的所有日期,而用四位數(shù)年份代表所有其他日期。 |
若要確定語(yǔ)言環(huán)境的默認(rèn)年份選項(xiàng),請(qǐng)調(diào)用GetFormatItem()NLS類方法:
DHC-APP> WRITE ##class(%SYS.NLS.Format).GetFormatItem("YearOption")
0
如果省略yearopt或?qū)earopt值指定為-1,則$ZDATE使用當(dāng)前語(yǔ)言環(huán)境的YearOption屬性,除非滿足以下條件之一:如果localeopt = 1,則yearopt默認(rèn)為ODBC year選項(xiàng)。如果localeopt = 0或未指定,并且dformat是18、19、20或21(伊斯蘭日期格式),則yearopt的默認(rèn)值為ODBC year選項(xiàng)(4位數(shù)字的年份);否則,默認(rèn)值為ODBC年?;亟倘掌趯⒑雎?code>YearOption屬性值。
解決2000年以前的年份是2位數(shù)
DHC-APP>w $Zd($h-2000)
05/22/2015
DHC-APP>w $Zd($h-20000)
02/08/66
DHC-APP>w $Zd($h-20000,,,4)
02/08/1966
startwin
一個(gè)數(shù)字值,指定滑動(dòng)窗口的開(kāi)始,在此期間,日期必須用兩位數(shù)的年份表示。請(qǐng)參閱參數(shù)部分。當(dāng)yearopt為3或5時(shí),必須提供startwin。startwin不適用于任何其他yearopt值。
當(dāng)yearopt = 3時(shí),startwin是$HOROLOG日期格式的絕對(duì)日期,指示滑動(dòng)窗口的開(kāi)始日期。
當(dāng)yearopt = 5時(shí),startwin是一個(gè)數(shù)字值,表示滑動(dòng)窗口的開(kāi)始年份,表示為當(dāng)前年份之前的年數(shù)?;瑒?dòng)窗口始終從startwin中指定的一年的1月1日開(kāi)始。
endwin
一個(gè)數(shù)字值,指定滑動(dòng)窗口的結(jié)束,在此期間內(nèi),日期用兩位數(shù)的年份表示。當(dāng)yearopt為3或5時(shí),您可以選擇提供endwin。endwin不適用于任何其他yearopt值。
當(dāng)yearopt = 3時(shí),endwin是$HOROLOG日期格式的絕對(duì)日期,指示滑動(dòng)窗口的結(jié)束日期。
當(dāng)yearopt = 5時(shí),endwin是一個(gè)數(shù)字值,它表示滑動(dòng)窗口的結(jié)束年份,表示為當(dāng)前年份之后的年數(shù)?;瑒?dòng)窗口始終在endwin中指定的當(dāng)年12月31日結(jié)束。如果未指定endwin,則默認(rèn)為startwin后100年的12月31日。
如果省略endwin(或指定為-1),則有效滑動(dòng)窗口將為100年。 endwin值為-1是一種特殊情況,即使較高和較低endwin值返回錯(cuò)誤,也總是返回日期值。因此,最好在指定100年窗口時(shí)省略endwin,并避免使用負(fù)endwin值。
如果同時(shí)提供startwin和endwin,則它們指定的滑動(dòng)窗口的持續(xù)時(shí)間不得超過(guò)100年。
mindate
該表達(dá)式指定有效日期范圍的下限(含)??梢灾付?code>$HOROLOG整數(shù)日期計(jì)數(shù)(例如,2013年1月1日表示為62823)或$HOROLOG字符串值。可以包括或忽略$HOROLOG日期字符串的時(shí)間部分(例如“62823,43200”),但僅解析mindate的日期部分。早于mindate指定hdate值會(huì)生成錯(cuò)誤。
以下是受支持的提示值:
- 正整數(shù):最常見(jiàn)的正念指定為正整數(shù),以建立最早的允許日期為1840年12月31日之后的某個(gè)日期。例如,正念21550會(huì)將最早的允許日期建立為1900年1月1日。最高有效值是2980013(9999年12月31日)。
- 0:指定最小日期為1840年12月31日。這是DateMinimum屬性的默認(rèn)值。
- 負(fù)整數(shù)-2或更大:指定從1840年12月31日開(kāi)始倒數(shù)的最小日期。例如,記號(hào)-14974將建立最早的允許日期為1800年1月1日。負(fù)記號(hào)值僅在DateMinimum屬性為時(shí)才有意義。當(dāng)前語(yǔ)言環(huán)境已設(shè)置為等于或大于負(fù)數(shù)。最低有效值為-672045。
- 如果省略(或指定為-1),則mindate默認(rèn)為當(dāng)前語(yǔ)言環(huán)境的
DateMinimum屬性值,除非以下條件之一為真:如果localeopt = 1,則minindate默認(rèn)值為0。如果localeopt未指定且dformat = 3,預(yù)設(shè)值是0。如果未指定localeopt并且dformat是18、19、20或21(伊斯蘭日期格式),則預(yù)設(shè)值是0。
可以獲取并設(shè)置DateMinimum屬性,如下所示:
/// d ##class(PHA.TEST.Function).ZDATE5()
ClassMethod ZDATE5()
{
SET min=##class(%SYS.NLS.Format).GetFormatItem("DateMinimum")
WRITE "初始DateMinimum值為 ",min,!
Permit18thCenturyDates
SET x=##class(%SYS.NLS.Format).SetFormatItem("DateMinimum",-51498)
SET newmin=##class(%SYS.NLS.Format).GetFormatItem("DateMinimum")
WRITE "設(shè)置DateMinimum值為 ",newmin,!!
RestrictTo19thCenturyDates
WRITE $ZDATE(-13000,1,,,,,-14974),!!
ResetDateMinimumToDefault
SET oldmin=##class(%SYS.NLS.Format).SetFormatItem("DateMinimum",min)
WRITE "從重置DateMinimum值",oldmin," to ",min
}
DHC-APP>d ##class(PHA.TEST.Function).ZDATE5()
初始DateMinimum值為 0
設(shè)置DateMinimum值為 -51498
05/29/1805
從重置DateMinimum值-51498 to 0
可以指定有或沒(méi)有maxdate的提示。指定大于maxdate的提示時(shí),會(huì)產(chǎn)生<ILLEGAL VALUE>錯(cuò)誤。
ODBC Date Format (dformat 3)
DateMinimum屬性的應(yīng)用由localeopt設(shè)置控制。當(dāng)localeopt = 1(dformat = 3的默認(rèn)值)時(shí),無(wú)論當(dāng)前的區(qū)域設(shè)置如何,最小日期均為0。因此,采用ODBC格式(dformat = 3),可以使用以下命令指定1840年12月31日之前的日期:
- 指定早于指定日期的提示:
DHC-APP> WRITE $ZDATE(-30,3,,,,,-365)
1840-12-01
- 指定早于指定日期的
DateMinimum屬性值,并設(shè)置localeopt = 0:
DHC-APP> DO ##class(%SYS.NLS.Format).SetFormatItem("DateMinimum",-365)
DHC-APP>WRITE $ZDATE(-30,3,,,,,,,,0)
1840-12-01
maxdate
該表達(dá)式指定有效日期范圍的上限(含)??梢灾付?code>$HOROLOG整數(shù)日期計(jì)數(shù)(例如1/1/2100表示為94599)或$HOROLOG字符串值??梢园ɑ蚴÷?code>$HOROLOG日期的時(shí)間部分(例如“94599,43200”),但僅會(huì)解析maxdate的日期部分。
如果省略了maxdate或?qū)⑵渲付?1,則最大日期限制是從當(dāng)前語(yǔ)言環(huán)境的DateMaximum屬性獲取的,該屬性默認(rèn)為$HOROLOG日期部分的最大允許值:2980013(對(duì)應(yīng)于9999年12月31日) )。但是,DateMaximum屬性的應(yīng)用由localeopt設(shè)置控制。當(dāng)localeopt = 1(dformat = 3的默認(rèn)值)時(shí),最大的默認(rèn)日期是ODBC值(2980013),與當(dāng)前的語(yǔ)言環(huán)境設(shè)置無(wú)關(guān)。回教日期格式也采用ODBC默認(rèn)值。泰文日期格式(dformat = 13)的最大日期是$HOROLOG 2781687,對(duì)應(yīng)于BE 31/12/9999。
指定大于maxdate的hdate會(huì)產(chǎn)生<VALUE OUT OF RANGE>錯(cuò)誤。
如果指定的最大日期大于2980013,則會(huì)產(chǎn)生<ILLEGAL VALUE>錯(cuò)誤。
可以指定maxdate或不指定。指定的maxdate小于mindate會(huì)生成<ILLEGAL VALUE>錯(cuò)誤。
erropt
為該參數(shù)指定值將抑制與無(wú)效或超出范圍的hdate值相關(guān)的<ILLEGAL VALUE> <VALUE OUT OF RANGE>錯(cuò)誤。 $ZDATE函數(shù)返回錯(cuò)誤值,而不是生成或錯(cuò)誤。
- 驗(yàn)證:Caché對(duì)hdate執(zhí)行規(guī)范的數(shù)字轉(zhuǎn)換。 hdate字符串的解析在第一個(gè)非數(shù)字字符處停止。因此,hdate字符串(例如64687AD)與64687相同。非數(shù)字日期(包括空字符串)的計(jì)算結(jié)果為0。因此,空字符串hdate返回
$HOROLOG初始日期:1840年12月31日。但是,如果hdate不會(huì)計(jì)算為整數(shù)(包含非零小數(shù)),它會(huì)生成<ILLEGAL VALUE>錯(cuò)誤。 - 范圍:hdate必須計(jì)算為mindate / maxdate范圍內(nèi)的整數(shù)。默認(rèn)情況下,大于2980013或小于0的日期值會(huì)生成錯(cuò)誤。通過(guò)將mindate設(shè)置為負(fù)數(shù),可以擴(kuò)展1840年12月31日之前的有效日期范圍。但是,對(duì)于dformat 18、19、20或21(回教伊斯蘭歷)日期,-445031之前的任何日期都會(huì)生成即使將mindate設(shè)置為較早的日期,也會(huì)出現(xiàn)
<ILLEGAL VALUE>錯(cuò)誤。
erropt參數(shù)僅抑制由于hdate的無(wú)效值或超出范圍的值而生成的錯(cuò)誤。無(wú)論是否提供錯(cuò)誤提示,由于其他參數(shù)無(wú)效或超出范圍而產(chǎn)生的錯(cuò)誤將始終產(chǎn)生錯(cuò)誤。
例如,當(dāng)$ZDATE指定一個(gè)滑動(dòng)窗口,其中endwin早于startwin時(shí),總是生成<ILLEGAL VALUE>錯(cuò)誤。同樣,當(dāng)maxdate小于mindate時(shí),會(huì)生成<ILLEGAL VALUE>錯(cuò)誤。
ZDateNull的無(wú)效日期處理
可以使用ZDateNull設(shè)置$ZDATE的行為,為hdate賦予無(wú)效值時(shí)。若要為當(dāng)前進(jìn)程設(shè)置此行為,請(qǐng)使用%SYSTEM.Process類的ZDateNull()方法??梢酝ㄟ^(guò)設(shè)置Config.Miscellaneous類的ZDateNull屬性來(lái)建立系統(tǒng)范圍的默認(rèn)行為。 $ZDATE可以發(fā)出錯(cuò)誤,也可以返回空值。
系統(tǒng)范圍的默認(rèn)行為是可配置的。轉(zhuǎn)到管理門(mén)戶,選擇“系統(tǒng)”,“配置”,“兼容性設(shè)置”。查看和編輯ZDateNull的當(dāng)前設(shè)置。默認(rèn)值為“false”,表示$ZDATE返回錯(cuò)誤。
localeopt
此布爾值參數(shù)將用戶的當(dāng)前語(yǔ)言環(huán)境定義或ODBC語(yǔ)言環(huán)境定義指定為語(yǔ)言環(huán)境指定的參數(shù)dformat,monthlist,yearopt,minate和maxdate的默認(rèn)值的來(lái)源:
- 如果
localeopt = 0,則所有這些參數(shù)均采用當(dāng)前的語(yǔ)言環(huán)境定義默認(rèn)值。 - 如果
localeopt = 1,則所有這些參數(shù)均采用ODBC默認(rèn)值。 - 如果未指定localeopt,則dformat參數(shù)確定這些參數(shù)的默認(rèn)值。如果
dformat = 3,則使用ODBC默認(rèn)值。如果dformat為18、19、20或21,則無(wú)論當(dāng)前語(yǔ)言環(huán)境定義如何,都使用回教日期格式默認(rèn)值。對(duì)于所有其他dformat值,使用當(dāng)前的語(yǔ)言環(huán)境定義默認(rèn)值。
不能更改ODBC語(yǔ)言環(huán)境。它用于格式化日期字符串,這些日期字符串在選擇了不同的國(guó)家語(yǔ)言支持(NLS)的Caché流程之間可移植。如果localeopt = 1,則ODBC區(qū)域設(shè)置日期定義如下:
- 日期格式默認(rèn)為3。因此,如果dformat未定義或?yàn)?1,則使用日期格式3。
- 日期分隔符默認(rèn)為
“/”。但是,日期格式默認(rèn)為3,該格式始終使用“-”作為日期分隔符。 - Year選項(xiàng)默認(rèn)為4位數(shù)字。
- 最小和最大日期:0和2980013(
$HOROLOG日期計(jì)數(shù))。 - 使用英語(yǔ)月份名稱,月份縮寫(xiě),工作日名稱和工作日縮寫(xiě)。
示例
日期格式示例
下面的示例說(shuō)明$ZDATE如何返回當(dāng)前日期的各種dformat格式。 yearopt采用默認(rèn)值。當(dāng)然,日期分隔符以及月份和星期幾的名稱和縮寫(xiě)取決于語(yǔ)言環(huán)境。本示例使用當(dāng)前的用戶區(qū)域設(shè)置定義:
/// d ##class(PHA.TEST.Function).ZDATE6()
ClassMethod ZDATE6()
{
WRITE $ZDATE($HOROLOG), " default date format",!
WRITE $ZDATE($HOROLOG,1)," 1=American numeric format",!
WRITE $ZDATE($HOROLOG,2)," 2=Month abbreviation format",!
WRITE $ZDATE($HOROLOG,3)," 3=ODBC numeric format",!
WRITE $ZDATE($HOROLOG,4)," 4=European numeric format",!
WRITE $ZDATE($HOROLOG,5)," 5=Month abbreviation format",!
WRITE $ZDATE($HOROLOG,6)," 6=Month abbreviation format",!
WRITE $ZDATE($HOROLOG,7)," 7=Month abbreviation format",!
WRITE $ZDATE($HOROLOG,8)," 8=Numeric format no spaces",!
WRITE $ZDATE($HOROLOG,9)," 9=Month name format",!
WRITE $ZDATE($HOROLOG,10)," 10=Day-of-week format",!
WRITE $ZDATE($HOROLOG,11)," 11=Day abbreviation format",!
WRITE $ZDATE($HOROLOG,12)," 12=Day name format",!
WRITE $ZDATE($HOROLOG,13)," 13=Thai numeric format",!
WRITE $ZDATE($HOROLOG,14)," 14=Day-of-year format",!
WRITE $ZDATE($HOROLOG,15)," 15=European numeric format",!
WRITE $ZDATE($HOROLOG,16)," 16=Japanese date format",!
WRITE $ZDATE($HOROLOG,17)," 17=Japanese date format with spaces"
}
DHC-APP>d ##class(PHA.TEST.Function).ZDATE6()
11/11/2020 default date format
11/11/2020 1=American numeric format
11 Nov 2020 2=Month abbreviation format
2020-11-11 3=ODBC numeric format
11/11/2020 4=European numeric format
Nov 11, 2020 5=Month abbreviation format
Nov 11 2020 6=Month abbreviation format
Nov 11 2020 7=Month abbreviation format
20201111 8=Numeric format no spaces
November 11, 2020 9=Month name format
3 10=Day-of-week format
Wed 11=Day abbreviation format
Wednesday 12=Day name format
11/11/2563 13=Thai numeric format
316 14=Day-of-year format
11/11/2020 15=European numeric format
2020年11月11日 16=Japanese date format
2020年 11月 11日 17=Japanese date format with spaces
下面的示例將日期與區(qū)域設(shè)置進(jìn)行比較,該區(qū)域設(shè)置默認(rèn)為當(dāng)前用戶區(qū)域設(shè)置與日期(當(dāng)localeopt = 1激活ODBC區(qū)域設(shè)置定義時(shí))。為了使該示例更有趣,將當(dāng)前用戶區(qū)域設(shè)置設(shè)置為法語(yǔ):
/// d ##class(PHA.TEST.Function).ZDATE7()
ClassMethod ZDATE7()
{
SET fmt=##class(%SYS.NLS.Format).%New("fraw")
WRITE "default: local=",$ZDATE($HOROLOG)," ODBC=",$ZDATE($HOROLOG,,,,,,,,,1),!
WRITE "-1: local=",$ZDATE($HOROLOG,-1)," ODBC=",$ZDATE($HOROLOG,-1,,,,,,,,1),!!
FOR x=1:1:17 {
WRITE x,": local=",$ZDATE($HOROLOG,x)," ODBC=",$ZDATE($HOROLOG,x,,,,,,,,1),!
}
}
DHC-APP>d ##class(PHA.TEST.Function).ZDATE7()
default: local=11/11/2020 ODBC=2020-11-11
-1: local=11/11/2020 ODBC=2020-11-11
1: local=11/11/2020 ODBC=11/11/2020
2: local=11 Nov 2020 ODBC=11 Nov 2020
3: local=2020-11-11 ODBC=2020-11-11
4: local=11/11/2020 ODBC=11/11/2020
5: local=Nov 11, 2020 ODBC=Nov 11, 2020
6: local=Nov 11 2020 ODBC=Nov 11 2020
7: local=Nov 11 2020 ODBC=Nov 11 2020
8: local=20201111 ODBC=20201111
9: local=Novembre 11, 2020 ODBC=November 11, 2020
10: local=3 ODBC=3
11: local=Mer ODBC=Wed
12: local=Mercredi ODBC=Wednesday
13: local=11/11/2563 ODBC=11/11/2563
14: local=316 ODBC=316
15: local=11/11/2020 ODBC=11/11/2020
16: local=2020年11月11日 ODBC=2020年11月11日
17: local=2020年 11月 11日 ODBC=2020年 11月 11日
兩位數(shù)的年份滑動(dòng)窗口示例
為了說(shuō)明如何使用顯式滑動(dòng)窗口,假設(shè)在1997年輸入以下函數(shù)調(diào)用。59461的日期表示2003年10月19日; hd的日期為2003年10月19日。 dformat 1允許它返回兩位數(shù)或四位數(shù)的年份,yearopt 5可以指定四位數(shù)年份的滑動(dòng)窗口。由于使用了yearopt設(shè)置,因此通過(guò)加法和減法來(lái)計(jì)算相對(duì)于當(dāng)年(在本例中為1997)的startwin和endwin。
DHC-APP>WRITE $ZDATE(59461,1,,5,90,10)
10/19/03
用于將年份顯示為兩位數(shù)的滑動(dòng)窗口從1/1/1907擴(kuò)展到12/31/2006。因此,Caché將日期顯示為10/19/03。
日期范圍示例
下面的示例使用mindate和maxdate測(cè)試可能的出生日期。 maxdate假定出生日期不能在將來(lái)。這位思想家假設(shè)列出的任何人都不會(huì)超過(guò)124歲。日期以$HOROLOG格式指定:
/// d ##class(PHA.TEST.Function).ZDATE8()
ClassMethod ZDATE8()
{
SET bdateh(1)=62142
SET bdateh(2)=16800
SET bdateh(3)=70000
DO $SYSTEM.Process.ZDateNull(1)
SET maxdate=$PIECE($HOROLOG,",",1)+1
SET mindate=maxdate-(365.25*124)
FOR x=1:1:3 {
SET bdate=$ZDATE(bdateh(x),,,,,,mindate,maxdate)
IF bdate="" {WRITE "Birth date ",bdateh(x)," is out of range",!}
ELSE {WRITE "Birth date ",bdateh(x)," is ",bdate,!}
}
}
DHC-APP>d ##class(PHA.TEST.Function).ZDATE8()
Birth date 62142 is 20/02/2011
Birth date 16800 is out of range
Birth date 70000 is out of range
上面的$ZDATE輸入值中有兩個(gè)不在出生日期測(cè)試的日期范圍之內(nèi):16800(12/30/1886)在124年前,而70000(08/26/2032)在將來(lái)。默認(rèn)情況下,這些$ZDATE調(diào)用將生成錯(cuò)誤,但是由于設(shè)置了ZDateNull(1),它們將返回空字符串(“”)。
注意
$ZDATE的值無(wú)效
在以下情況下,收到<FUNCTION> 錯(cuò)誤:
- 如果指定了無(wú)效的dformat代碼(小于-1或大于17的整數(shù)值,或者非整數(shù)值)。
- 如果在yearopt為3或5時(shí)未指定startwin值。
在以下情況下,會(huì)收到<ILLEGAL VALUE>錯(cuò)誤:
- 如果為hdate指定了無(wú)效值,并且不提供錯(cuò)誤值或設(shè)置
ZDateNull(如下所述)。 - 如果給定的月份數(shù)大于monthlist中的月份數(shù)。
- 如果maxdate小于主意。
- 如果endwin小于startwin。
- 如果startwin和endwin指定滑動(dòng)時(shí)間窗口,其持續(xù)時(shí)間大于100年。
在以下情況下,收到<VALUE OUT OF RANGE>錯(cuò)誤:
- 如果指定的hdate值超出有效日期范圍。對(duì)于標(biāo)準(zhǔn)Caché,它是0到298013。對(duì)于ISM兼容的Caché,它是1到94232。可以使用
%SYSTEM.Process類的ZDateNull()方法來(lái)設(shè)置日期范圍和當(dāng)前進(jìn)程的無(wú)效日期行為。 - 如果指定的其他有效日期超出了為maxdate和mindate假定的值所定義的范圍,并且不提供錯(cuò)誤的值。
使用$ZDATE代替實(shí)用程序
需要在$ZDATE函數(shù)和date實(shí)用程序之間進(jìn)行選擇時(shí),請(qǐng)記住以下幾點(diǎn):
- 可以使用
$ZDATE函數(shù)代替%DO或%D實(shí)用程序的大多數(shù)現(xiàn)有入口點(diǎn)。 - 可以直接調(diào)用
$ZDATE($HOROLOG,7)而不是調(diào)用INT ^%D。這以“ MM DD [YY] YY”格式提供當(dāng)前日期。 -
$ZDATEH和$ZDATE比調(diào)用%DATE,%DI或%DO的入口點(diǎn)快得多。