第八十三章 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)值『巧冢可以將所有格式的默認(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
胆筒。在管理門戶中找到完整的語(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)(“篷帅。”
)鼻忠,如第三個(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)-縮寫的日期名稱 |
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屬性中提取的月份縮寫升筏∧茫可以從指定為$ ZDATE的monthlist參數(shù)的可選列表中提取備用月份的縮寫(或任何長(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 | 工作日名稱縮寫荧琼,由當(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)(使用“姻乓√Q遥” 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)工作日名稱和工作日縮寫妻怎,請(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)〖诓。可以從任何UnicodeCaché實(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á)式可解析為月份名稱或月份名稱縮寫的字符串,以分隔符分隔盛泡。 monthlist中的名稱替換了來(lái)自當(dāng)前語(yǔ)言環(huán)境的MonthAbbr屬性的默認(rèn)月份縮寫值或來(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)月份名稱和月份縮寫鸟蜡,請(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年夯缺。回教日期將忽略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á)式指定有效日期范圍的下限(含)社证。可以指定為$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á)式指定有效日期范圍的上限(含)滴肿≌裕可以指定為$HOROLOG
整數(shù)日期計(jì)數(shù)(例如1/1/2100表示為94599)或$HOROLOG
字符串值。可以包括或省略$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)到管理門戶宇植,選擇“系統(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ǔ)月份名稱只厘,月份縮寫,工作日名稱和工作日縮寫舅巷。
示例
日期格式示例
下面的示例說(shuō)明$ZDATE
如何返回當(dāng)前日期的各種dformat格式羔味。 yearopt采用默認(rèn)值。當(dāng)然钠右,日期分隔符以及月份和星期幾的名稱和縮寫取決于語(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)快得多登失。