第八十三章 Caché 函數(shù)大全 $ZDATE 函數(shù)

第八十三章 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ò)誤。

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)值為伊斯蘭月份列表(使用拉丁字母表示的阿拉伯名稱),忽略MonthAbbrMonthName屬性值。

若要確定語(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 = 1dformat = 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 = 1dformat = 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)快得多。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容