日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第八十三章 Caché 函数大全 $ZDATE 函数

發(fā)布時間:2024/3/13 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第八十三章 Caché 函数大全 $ZDATE 函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 第八十三章 Caché 函數(shù)大全 $ZDATE 函數(shù)
  • 大綱
    • 參數(shù)
  • 描述
    • 簡單的$ZDATE格式
    • 可自定義日期默認
  • 參數(shù)
    • hdate
    • dformat
    • dformat Default
    • dformat Settings
    • monthlist
    • yearopt
    • startwin
    • endwin
    • mindate
    • ODBC Date Format (dformat 3)
    • maxdate
    • erropt
    • ZDateNull的無效日期處理
    • localeopt
  • 示例
    • 日期格式示例
    • 兩位數(shù)的年份滑動窗口示例
    • 日期范圍示例
  • 注意
    • $ZDATE的值無效
    • 使用`$ZDATE`代替實用程序

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

驗證日期并將其從內(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 一個整數(shù),指定內(nèi)部日期格式的值。該整數(shù)表示自1840年12月31日以來經(jīng)過的天數(shù)。如果將$HOROLOG指定為hdate,則僅使用$HOROLOG的日期部分。請參閱下面的hdate。
  • dformat 可選—一個整數(shù)代碼,指定返回日期的格式。請參閱下面的dformat。
  • monthlist 可選-字符串或變量名稱,用于指定一組月份名稱。該字符串必須以分隔符開頭,并且其12個條目必須由該分隔符分隔。請參閱下面的月列表。
  • yearopt 可選—整數(shù)代碼,用于指定是將年表示為兩位數(shù)字還是四位數(shù)字的值。請參閱下面的yearopt。
  • startwin 可選-滑動窗口的開始,在此期間,日期必須用兩位數(shù)的年份表示。請參閱下面的startwin。
  • endwin 可選-滑動窗口的末尾,其間用兩位數(shù)的年份表示日期。請參閱下面的endwin。
  • mindate 可選-有效日期范圍的下限。指定為$HOROLOG整數(shù)日期計數(shù),0表示1840年12月31日。可以指定為正整數(shù)或負整數(shù)。請參閱下面的提示。
  • maxdate 可選-有效日期范圍的上限。指定為$HOROLOG整數(shù)日期計數(shù)。請參閱下面的maxdate。
  • erropt 可選-當hdate無效時返回的表達式。為該參數(shù)指定值將抑制與無效或超出范圍的hdate值相關(guān)的錯誤代碼。 $ZDATE而不是發(fā)出錯誤消息,而是返回erropt。請參閱下面的錯誤提示。
  • localeopt 可選-布爾值標志,用于指定dformat,monthlist,yearopt,minate和maxdate默認值以及其他日期特征(例如日期分隔符)使用的語言環(huán)境:localeopt = 0:當前的語言環(huán)境屬性設(shè)置確定這些參數(shù)默認值。localeopt = 1:ODBC標準語言環(huán)境確定這些參數(shù)默認值。未指定localeopt:dformat值確定這些參數(shù)默認值。如果dformat = 3,則使用ODBC默認值。日文和回教日期dformatvalues使用其自己的默認值。對于所有其他dformat值,當前的語言環(huán)境屬性設(shè)置用作默認值。請參閱下面的localeopt。

指定參數(shù)值之間的省略參數(shù)由占位符逗號指示。末尾的占位符逗號不是必需的,但允許使用。逗號之間允許有空格,以指示省略的參數(shù)。

描述

$ZDATE函數(shù)將內(nèi)部存儲格式($HOROLOG格式)的指定日期轉(zhuǎn)換為幾種備用日期顯示格式之一。 $ZDATE返回的值取決于使用的參數(shù)。

簡單的$ZDATE格式

$ZDATE(hdate)是$ZDATE的最基本形式,它以與指定hdate對應的顯示格式返回日期。 hdate是自1840年12月31日起經(jīng)過的天數(shù)的整數(shù)。范圍從0到2980013(從12/31/1840到12/31/9999)。

默認情況下,$ZDATE(hdate)用兩位數(shù)字表示1900年到1999年之間的年份。它用四位數(shù)字表示1900年之前或1999年之后的年份。例如:

/// d ##class(PHA.TEST.Function).ZDATE() ClassMethod ZDATE() {WRITE $ZDATE(21400),! ; returns 08/04/1899WRITE $ZDATE(50000),! ; returns 11/23/77WRITE $ZDATE(60000),! ; returns 04/10/2005WRITE $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

當提供$HOROLOG日期到$ZDATE時,僅使用日期部分。以$HOROLOG格式,日期和時間顯示為兩個整數(shù),中間用逗號分隔。遇到逗號(非數(shù)字字符)時,$ZDATE會忽略字符串的其余部分。在以下示例中,$ZDATE使用$HOROLOG格式值返回04/10/2005和當前日期:

DHC-APP>WRITE !,$ZDATE("60000,12345")04/10/2005 DHC-APP>WRITE !,$ZDATE($HOROLOG)11/06/2020

可自定義日期默認

在Caché啟動時,默認日期格式被初始化為dformat = 1,這是帶有斜杠日期分隔符(MM / DD / [YY] YY)的美國日期格式。要將此格式和其他默認格式設(shè)置為當前語言環(huán)境的值,請設(shè)置以下全局變量:SET ^SYS("NLS","Config","LocaleFormat")=1。這會將所有進程的所有格式默認值設(shè)置為當前語言環(huán)境值。這些默認值將一直保留到更改此全局變量為止。

注意:本節(jié)介紹未定義localeopt或?qū)⑵湓O(shè)置為0時應用的用戶語言環(huán)境定義。當localeopt = 1時,$ZDATE使用預定義的ODBC語言環(huán)境。

可以使用NLS(國家語言支持)覆蓋當前進程的格式默認值。可以將所有格式的默認值更改為指定語言環(huán)境的值,也可以更改單個格式的值。

  • 要將所有格式默認值(包括日期格式默認值)設(shè)置為指定語言環(huán)境的屬性,請調(diào)用以下方法調(diào)用:SET fmt=##class(%SYS.NLS.Format).%New("lname") ,其中l(wèi)name是所需語言環(huán)境的NLS名稱。 (例如,deuw =German,espw = Spanish,fraw = French,ptbw = Brazilian Portuguese,rusw = Russian,jpnw = Japanese。在管理門戶中找到完整的語言環(huán)境列表:System,Configuration,NLS Settings,Locale Definitions )要將這些默認設(shè)置設(shè)置為當前語言環(huán)境的屬性,請指定lname為“ current”或空字符串(“”)。
  • 要將默認日期格式設(shè)置為指定的dformat格式,請調(diào)用SetFormatItem()方法:SET rtn=##class(%SYS.NLS.Format).SetFormatItem("DateFormat",n),其中n是希望將其設(shè)為默認值的dformat值。

下面的示例演示如何將所有格式默認設(shè)置為俄語語言環(huán)境,以默認格式(俄語)從$ZDATE返回日期,然后將格式默認值重置為當前語言環(huán)境默認值。請注意,俄語語言環(huá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è)置各個格式的默認值。第一個$ZDATE以默認格式返回日期。第一個SetFormatItem()方法將默認值更改為dformat = 4或歐洲日期格式(DD / MM / [YY] YY),如第二個$ZDATE所示。第二個SetFormatItem()方法更改日期分隔符的默認值(這會影響dformat -1、1、4和15)。在此示例中,日期分隔符字符設(shè)置為點(“。”),如第三個$ZDATE所示。最后,該程序?qū)⑦€原原始日期格式值:

/// d ##class(PHA.TEST.Function).ZDATE2() ClassMethod ZDATE2() { InitialValsSET fmt=##class(%SYS.NLS.Format).GetFormatItem("DateFormat")SET sep=##class(%SYS.NLS.Format).GetFormatItem("DateSeparator")WRITE !,$ZDATE($HOROLOG) ChangeValsSET x=##class(%SYS.NLS.Format).SetFormatItem("DateFormat",3)WRITE !,$ZDATE($HOROLOG)SET y=##class(%SYS.NLS.Format).SetFormatItem("DateSeparator",".")WRITE !,$ZDATE($HOROLOG) RestoreValsSET 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日以來經(jīng)過的天數(shù)。默認情況下,它必須是0到2980013之間的整數(shù)。可以將hdate指定為數(shù)字,字符串文字或表達式。 Caché將hdate轉(zhuǎn)換為規(guī)范形式。它會在其第一個非數(shù)字字符處截斷數(shù)字字符串(例如$HOROLOG值)。它將非數(shù)字字符串評估為整數(shù)0。不解析為整數(shù)的浮點數(shù)將生成<ILLEGAL VALUE>錯誤。

默認情況下,最早的有效hdate為0(1840年12月31日)。默認有效日期范圍是0到2980013(含),包括從12/31/1840到12/31/9999的日期。默認情況下,日期限制為正整數(shù),因為DateMinimum屬性默認為0。如果當前語言環(huán)境的DateMinimum屬性設(shè)置為更大或等于負整數(shù),則可以將較早的日期指定為負整數(shù)。有效的最低DateMinimum值的最低值是-672045,對應于0001年1月1日。Caché使用了多功的格里高利歷,將格里高利歷回溯到“ Year 1”,符合ISO 8601標準。這在一定程度上是因為公歷是在不同國家的不同時間采用的。例如,許多歐洲大陸在1582年采用了它;大不列顛及美國在1752年采用了它。因此,當?shù)夭捎酶窭锔呃麣v之前的Caché日期可能與根據(jù)當時有效的當?shù)貧v法記錄的歷史日期不符。有關(guān)1840年之前的日期的更多詳細信息,請參考mindate參數(shù)。

CachéSQL支持Caché配置設(shè)置ZDateNULL。

  • 當ZDateNULL = OFF(默認值)時,無效和超出范圍的hdate值的行為以及由此產(chǎn)生的錯誤如erropt參數(shù)中所述。
  • 當ZDateNULL = ON時,無效和超出范圍的hdate值的行為以及由此產(chǎn)生的錯誤如下:
    • 有效日期范圍是從1到94232(含),包括從01/01/1841到12/30/2098的日期。該日期范圍是為具有三個或更少參數(shù)的任何$ZDATE函數(shù)調(diào)用設(shè)置的。如果$ZDATE函數(shù)調(diào)用具有三個以上的參數(shù),則有效的日期范圍是從mindate和maxdate參數(shù)(如果指定)中獲取的,或者從為當前語言環(huán)境建立的日期范圍中獲取。
    • 無效的日期值將返回空字符串(“”),而不是發(fā)出錯誤。

dformat

返回日期的格式。有效值為:

值含義
1MM/DD/[YY]YY(07/01/97或03/27/2002)-美國數(shù)字格式。日期分隔符(/或.)。取自當前區(qū)域設(shè)置。
2DD Mmm [ YY ]YY (01 Jul 97 or 27 Mar 2002)
3YYYY-MM-DD (1997-07-01 or 2002-03-27) ODBC格式。默認情況下,此格式與當前的語言環(huán)境設(shè)置(localeopt = 1)無關(guān),從而以O(shè)DBC標準交換格式指定日期。要以這種格式使用當前的日期語言環(huán)境設(shè)置,請設(shè)置localeopt = 0。
4DD/MM/[YY]YY (01/07/97 or 27/03/2002) 歐洲數(shù)字格式。日期分隔符(/或。)取自當前的語言環(huán)境設(shè)置。
5Mmm [D]D, YYYY (Jul 1, 1997 or Mar 27, 2002)
6Mmm [D]D YYYY (Jul 1 1997 or Mar 27 2002)
7Mmm DD [YY]YY (Jul 01 97 or Mar 27 2002)
8YYYYMMDD (19970701 or 20020327) 數(shù)值格式
9Mmmmm [D]D, YYYY (July 1, 1997 or March 27, 2002)
10W(2)-一周中的天數(shù),從0(星期日)到6(星期六)編號。與$SYSTEM.SQL.DAYOFWEEK()方法進行比較。
11Www(Tue)-縮寫的日期名稱
12Wwwwww (Tuesday))—全天名稱
13[D]D/[M]M/YYYY (1/7/2549 or 27/11/2549) 泰文日期格式。除無前導零外,日和月與歐洲用法相同。該年是佛教時代(BE)年,通過在公歷年中增加543年而得出。
14nnn(354)-年的天數(shù)
15DD/MM/[YY]YY (01/07/97 or 27/03/2002) 歐洲格式(與dformat = 4相同)。日期分隔符(/或。)取自當前的語言環(huán)境設(shè)置。
16YYYYc[M]Mc[D]Dc —日文日期格式。年,月和日的編號與其他日期格式相同;前導零被省略。在年,月和日編號之后插入“年”,“月”和“日”的日語字符(在此處顯示為c)。這些字符是Year = $CHAR(24180),Month = $CHAR(26376)和Day = $CHAR(26085)。
17YYYYc [M]Mc [D]Dc —日文日期格式。與dformat 16相同,除了在“ year”和“ month”日語字符之后插入空格。
18[D]D Mmmmm YYYY - 具有完整月份名稱的表格回歷(伊斯蘭)日期格式。省略了日期前導零。包括年份前導零。教堂日期-445031(公元07/19/0622)= 1穆罕默德0001。
19[D]D [M]M YYYY 帶月號的表格回歷(伊斯蘭)日期格式。日和月的前導零被省略;包括年份前導零。教堂日期-445031(西元07/19/0622)= 1 1 0001。
20[D]D Mmmmm YYYY —觀察到的回歷(伊斯蘭)日期格式,并帶有完整的月份名稱。默認為表格回歷(dformat 18)。要覆蓋表格計算,請使用%Calendar.Hijri類添加對新月新月的觀測。
21[D]D [M]M YYYY —觀察到的回歷(伊斯蘭)日期格式和月數(shù)。默認為表格回歷(dformat 19)。要覆蓋表格計算,請使用%Calendar.Hijri類添加對新月新月的觀測。
-1從用戶的語言環(huán)境(如果localeopt = 0或未定義)或從ODBC語言環(huán)境(默認為dformat = 3)獲取有效的dformat值。如果dformat是從用戶的語言環(huán)境中獲取的,則它是fmt.DateFormat的值,其中fmt是與當前進程關(guān)聯(lián)的## class(%SYS.NLS.Format)的實例。如果不指定dformat,則這是默認行為。

其中

語法含義
YYYYYYYY是四位數(shù)的年份。 [YY]如果hdate落在活動窗口內(nèi)達兩位數(shù)年份,則YY為兩位數(shù)年份;否則為四位數(shù)年份。
MM兩位數(shù)的月份:01到12。[M] M表示在月份1到9中省略了前導零。
DD兩位數(shù)的日期:01到31。[D] D表示第1到9天省略了前導零。
Mmm從當前語言環(huán)境的MonthAbbr屬性中提取的月份縮寫。可以從指定為$ ZDATE的monthlist參數(shù)的可選列表中提取備用月份的縮寫(或任何長度的名稱)。 MonthAbbr的默認值是:“Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec”
Mmmmm由當前語言環(huán)境的MonthName屬性指定的月份的全名。默認值為:“January February March … November December”
W數(shù)字0-6表示星期幾:Sunday=0, Monday=1, Tuesday=2, etc.
Www工作日名稱縮寫,由當前語言環(huán)境的WeekdayAbbr屬性指定。默認值為:“Sun Mon Tue Wed Thu Fri Sat”
Wwwwww由當前語言環(huán)境的WeekdayName屬性指定的工作日全名。默認值為:“Sunday Monday Tuesday … Friday Saturday”
nnn指定年份的天數(shù),始終為三位數(shù),如有必要,前導零。值是001到365(leap年時是366)。

dformat Default

如果省略dformat或?qū)⑵湓O(shè)置為-1,則dformat的默認值取決于localeopt參數(shù)和NLS DateFormat屬性:

  • 如果localeopt = 1,則dformat的默認值為ODBC格式。 monthlist,yearopt,mindate和maxdate參數(shù)的默認值也設(shè)置為ODBC格式。這與設(shè)置dformat = 3相同。
  • 如果localeopt = 0或未指定,則dformat默認值來自NLS DateFormat屬性。如果DateFormat = 3,則dformat的默認值為ODBC格式。但是,DateFormat = 3不會影響在當前NLS語言環(huán)境定義中指定的monthlist,yearopt,mindate和maxdate參數(shù)默認值。

若要確定語言環(huán)境的默認日期格式,請調(diào)用GetFormatItem()NLS類方法:

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

歐洲日期格式(dformat = 4,DD / MM / YYYY順序)是許多(但不是全部)歐洲語言的默認格式,包括英式英語,法語,德語,意大利語,西班牙語和葡萄牙語(使用“ /”日期分隔符)字符),以及捷克語(csyw),俄語(rusw),斯洛伐克語(skyw),斯洛文尼亞語(svnw)和烏克蘭語(ukrw)(使用“。” DateSeparator字符)。

dformat Settings

如果dformat為3(ODBC日期格式),則ODBC格式默認值也用于monthlist,yearopt,minate和maxdate參數(shù)默認值。當前的語言環(huán)境默認值將被忽略。

如果dformat為-1、1、4、13或15(數(shù)字日期格式),則$ZDATE使用當前語言環(huán)境的DateSeparator屬性的值作為月,日和年之間的分隔符。當dformat為3時,使用ODBC日期分隔符(“-”)。對于所有其他dformat值,空格用作日期分隔符。 DateSeparator的英語默認值為“ /”,并且所有文檔都使用此分隔符。

如果dformat是11或12(日期名稱)且localeopt = 0或未指定,則日期名稱值來自當前的語言環(huán)境屬性。如果localeopt = 1,則日期名稱來自O(shè)DBC語言環(huán)境。若要確定語言環(huán)境的默認工作日名稱和工作日縮寫,請調(diào)用以下NLS類方法:

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

如果dformat為16或17(日語日期格式),則返回的日期格式與語言環(huán)境設(shè)置無關(guān)。可以從任何UnicodeCaché實例返回日語格式的日期。在8位Caché實例上,將dformat指定為16或17會導致錯誤。

如果dformat為18、19、20或21(伊斯蘭日期格式)且未指定localeopt,則參數(shù)默認為伊斯蘭默認值,而不是當前的語言環(huán)境默認值。 monthlist參數(shù)默認為阿拉伯語月份名稱,并用拉丁字符音譯。 tformat,yearopt,mindate和maxdate參數(shù)默認為ODBC默認值。日期分隔符默認為回教默認值(一個空格),而不是ODBC默認值或當前區(qū)域設(shè)置的DateSeparator屬性值。如果localeopt = 0,則將當前語言環(huán)境屬性默認值用于這些參數(shù)。如果localeopt = 1,則將ODBC默認值用于這些參數(shù)。

monthlist

該表達式可解析為月份名稱或月份名稱縮寫的字符串,以分隔符分隔。 monthlist中的名稱替換了來自當前語言環(huán)境的MonthAbbr屬性的默認月份縮寫值或來自MonthName屬性的月份名稱值。

僅當dformat為2、5、6、7、9、18或20時,monthlist才有效。如果dformat為任何其他值,$ZDATE將忽略monthlist。

月列表字符串具有以下格式:

  • 字符串的第一個字符是定界符(通常為空格)。同一分隔符必須出現(xiàn)在月份列表的第一個月份名稱之前和每個月份名稱之間。可以指定任何單字符定界符;該分隔符出現(xiàn)在返回日期值的月,日和年部分之間,這就是為什么通常使用空格作為首選字符的原因。

  • 月份名稱字符串應包含十二個分隔值,分別對應于一月到十二月。可以指定多于或少于十二個月的名稱,但是如果沒有對應于hdate中月份的月份名稱,則會生成<ILLEGAL VALUE>錯誤。

如果省略monthlist或?qū)onthlist值指定為-1,則$ZDATE使用在當前語言環(huán)境的MonthAbbr或MonthName屬性中定義的月份名稱列表,除非滿足以下條件之一:如果localeopt = 1,則月份列表默認值為ODBC月列表(英文)。如果未指定localeopt且dformat為18或20(伊斯蘭日期格式),則月列表默認值為伊斯蘭月份列表(使用拉丁字母表示的阿拉伯名稱),忽略MonthAbbr或MonthName屬性值。

若要確定語言環(huán)境的默認月份名稱和月份縮寫,請調(diào)用GetFormatItem()NLS類方法:

DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("MonthAbbr"),!Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov DecDHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("MonthName"),!January February March April May June July August September October November December

以下示例列出了月份名稱的默認語言環(huán)境,將此過程的語言環(huán)境更改為俄語語言環(huán)境,然后列出了俄語月份名稱并顯示了帶有俄語月份名稱的當前日期。然后,它將語言環(huán)境默認值恢復為當前語言環(huá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,這是一個整數(shù)代碼,用于指定將年顯示為兩位數(shù)值的時間窗口。對于所有其他dformat值,將忽略yearopt。有效的yearopt值為:

值描述
-1從當前語言環(huán)境的YearOption屬性獲取有效的yearopt值,該值默認為0。如果未指定yearopt,則這是默認行為。
0除非有效的過程特定的滑動窗口(通過%DATE實用程序建立),否則用兩位數(shù)的年份表示20世紀日期(1900年至1999年),而所有其他日期則用4位年份表示。如果這樣的窗口有效,則僅將落在滑動窗口中的那些日期表示為兩位數(shù)年份,而將所有其他日期表示為四位數(shù)年份。
1代表20世紀的日期用兩位數(shù)的年份表示,其他所有日期用4位數(shù)的年份表示。
2用兩位年份表示所有日期。
3這些日期用兩位數(shù)的年份表示由startwin和(可選)endwin定義的滑動時間范圍內(nèi)的日期。用四位數(shù)字的年份表示所有其他日期。當yearopt = 3時,startwin和endwin是$HOROLOG格式的絕對日期。
4用四位數(shù)年份表示所有日期。 ODBC年選項。
5用兩位數(shù)年份表示所有日期,它們都落在startwin和(可選)endwin定義的滑動時間窗口內(nèi)。用四位數(shù)字的年份表示所有其他日期。當yearopt = 5時,startwin和endwin是相對年份。
6用兩位數(shù)字年份代表當前世紀的所有日期,而用四位數(shù)年份代表所有其他日期。

若要確定語言環(huán)境的默認年份選項,請調(diào)用GetFormatItem()NLS類方法:

DHC-APP> WRITE ##class(%SYS.NLS.Format).GetFormatItem("YearOption") 0

如果省略yearopt或?qū)earopt值指定為-1,則$ZDATE使用當前語言環(huán)境的YearOption屬性,除非滿足以下條件之一:如果localeopt = 1,則yearopt默認為ODBC year選項。如果localeopt = 0或未指定,并且dformat是18、19、20或21(伊斯蘭日期格式),則yearopt的默認值為ODBC year選項(4位數(shù)字的年份);否則,默認值為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

一個數(shù)字值,指定滑動窗口的開始,在此期間,日期必須用兩位數(shù)的年份表示。請參閱參數(shù)部分。當yearopt為3或5時,必須提供startwin。startwin不適用于任何其他yearopt值。

當yearopt = 3時,startwin是$HOROLOG日期格式的絕對日期,指示滑動窗口的開始日期。

當yearopt = 5時,startwin是一個數(shù)字值,表示滑動窗口的開始年份,表示為當前年份之前的年數(shù)。滑動窗口始終從startwin中指定的一年的1月1日開始。

endwin

一個數(shù)字值,指定滑動窗口的結(jié)束,在此期間內(nèi),日期用兩位數(shù)的年份表示。當yearopt為3或5時,您可以選擇提供endwin。endwin不適用于任何其他yearopt值。

當yearopt = 3時,endwin是$HOROLOG日期格式的絕對日期,指示滑動窗口的結(jié)束日期。

當yearopt = 5時,endwin是一個數(shù)字值,它表示滑動窗口的結(jié)束年份,表示為當前年份之后的年數(shù)。滑動窗口始終在endwin中指定的當年12月31日結(jié)束。如果未指定endwin,則默認為startwin后100年的12月31日。

如果省略endwin(或指定為-1),則有效滑動窗口將為100年。 endwin值為-1是一種特殊情況,即使較高和較低endwin值返回錯誤,也總是返回日期值。因此,最好在指定100年窗口時省略endwin,并避免使用負endwin值。

如果同時提供startwin和endwin,則它們指定的滑動窗口的持續(xù)時間不得超過100年。

mindate

該表達式指定有效日期范圍的下限(含)。可以指定為$HOROLOG整數(shù)日期計數(shù)(例如,2013年1月1日表示為62823)或$HOROLOG字符串值。可以包括或忽略$HOROLOG日期字符串的時間部分(例如“62823,43200”),但僅解析mindate的日期部分。早于mindate指定hdate值會生成錯誤。

以下是受支持的提示值:

  • 正整數(shù):最常見的正念指定為正整數(shù),以建立最早的允許日期為1840年12月31日之后的某個日期。例如,正念21550會將最早的允許日期建立為1900年1月1日。最高有效值是2980013(9999年12月31日)。
  • 0:指定最小日期為1840年12月31日。這是DateMinimum屬性的默認值。
  • 負整數(shù)-2或更大:指定從1840年12月31日開始倒數(shù)的最小日期。例如,記號-14974將建立最早的允許日期為1800年1月1日。負記號值僅在DateMinimum屬性為時才有意義。當前語言環(huán)境已設(shè)置為等于或大于負數(shù)。最低有效值為-672045。
  • 如果省略(或指定為-1),則mindate默認為當前語言環(huán)境的DateMinimum屬性值,除非以下條件之一為真:如果localeopt = 1,則minindate默認值為0。如果localeopt未指定且dformat = 3,預設(shè)值是0。如果未指定localeopt并且dformat是18、19、20或21(伊斯蘭日期格式),則預設(shè)值是0。

可以獲取并設(shè)置DateMinimum屬性,如下所示:

/// d ##class(PHA.TEST.Function).ZDATE5() ClassMethod ZDATE5() {SET min=##class(%SYS.NLS.Format).GetFormatItem("DateMinimum")WRITE "初始DateMinimum值為 ",min,! Permit18thCenturyDatesSET x=##class(%SYS.NLS.Format).SetFormatItem("DateMinimum",-51498)SET newmin=##class(%SYS.NLS.Format).GetFormatItem("DateMinimum")WRITE "設(shè)置DateMinimum值為 ",newmin,!! RestrictTo19thCenturyDatesWRITE $ZDATE(-13000,1,,,,,-14974),!! ResetDateMinimumToDefaultSET 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值為 -5149805/29/1805從重置DateMinimum值-51498 to 0

可以指定有或沒有maxdate的提示。指定大于maxdate的提示時,會產(chǎn)生<ILLEGAL VALUE>錯誤。

ODBC Date Format (dformat 3)

DateMinimum屬性的應用由localeopt設(shè)置控制。當localeopt = 1(dformat = 3的默認值)時,無論當前的區(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

該表達式指定有效日期范圍的上限(含)。可以指定為$HOROLOG整數(shù)日期計數(shù)(例如1/1/2100表示為94599)或$HOROLOG字符串值。可以包括或省略$HOROLOG日期的時間部分(例如“94599,43200”),但僅會解析maxdate的日期部分。

如果省略了maxdate或?qū)⑵渲付?1,則最大日期限制是從當前語言環(huán)境的DateMaximum屬性獲取的,該屬性默認為$HOROLOG日期部分的最大允許值:2980013(對應于9999年12月31日) )。但是,DateMaximum屬性的應用由localeopt設(shè)置控制。當localeopt = 1(dformat = 3的默認值)時,最大的默認日期是ODBC值(2980013),與當前的語言環(huán)境設(shè)置無關(guān)。回教日期格式也采用ODBC默認值。泰文日期格式(dformat = 13)的最大日期是$HOROLOG 2781687,對應于BE 31/12/9999。

指定大于maxdate的hdate會產(chǎn)生<VALUE OUT OF RANGE>錯誤。

如果指定的最大日期大于2980013,則會產(chǎn)生<ILLEGAL VALUE>錯誤。

可以指定maxdate或不指定。指定的maxdate小于mindate會生成<ILLEGAL VALUE>錯誤。

erropt

為該參數(shù)指定值將抑制與無效或超出范圍的hdate值相關(guān)的<ILLEGAL VALUE> <VALUE OUT OF RANGE>錯誤。 $ZDATE函數(shù)返回錯誤值,而不是生成或錯誤。

  • 驗證:Caché對hdate執(zhí)行規(guī)范的數(shù)字轉(zhuǎn)換。 hdate字符串的解析在第一個非數(shù)字字符處停止。因此,hdate字符串(例如64687AD)與64687相同。非數(shù)字日期(包括空字符串)的計算結(jié)果為0。因此,空字符串hdate返回$HOROLOG初始日期:1840年12月31日。但是,如果hdate不會計算為整數(shù)(包含非零小數(shù)),它會生成<ILLEGAL VALUE>錯誤。
  • 范圍:hdate必須計算為mindate / maxdate范圍內(nèi)的整數(shù)。默認情況下,大于2980013或小于0的日期值會生成錯誤。通過將mindate設(shè)置為負數(shù),可以擴展1840年12月31日之前的有效日期范圍。但是,對于dformat 18、19、20或21(回教伊斯蘭歷)日期,-445031之前的任何日期都會生成即使將mindate設(shè)置為較早的日期,也會出現(xiàn)<ILLEGAL VALUE>錯誤。

erropt參數(shù)僅抑制由于hdate的無效值或超出范圍的值而生成的錯誤。無論是否提供錯誤提示,由于其他參數(shù)無效或超出范圍而產(chǎn)生的錯誤將始終產(chǎn)生錯誤。

例如,當$ZDATE指定一個滑動窗口,其中endwin早于startwin時,總是生成<ILLEGAL VALUE>錯誤。同樣,當maxdate小于mindate時,會生成<ILLEGAL VALUE>錯誤。

ZDateNull的無效日期處理

可以使用ZDateNull設(shè)置$ZDATE的行為,為hdate賦予無效值時。若要為當前進程設(shè)置此行為,請使用%SYSTEM.Process類的ZDateNull()方法。可以通過設(shè)置Config.Miscellaneous類的ZDateNull屬性來建立系統(tǒng)范圍的默認行為。 $ZDATE可以發(fā)出錯誤,也可以返回空值。

系統(tǒng)范圍的默認行為是可配置的。轉(zhuǎn)到管理門戶,選擇“系統(tǒng)”,“配置”,“兼容性設(shè)置”。查看和編輯ZDateNull的當前設(shè)置。默認值為“false”,表示$ZDATE返回錯誤。

localeopt

此布爾值參數(shù)將用戶的當前語言環(huán)境定義或ODBC語言環(huán)境定義指定為語言環(huán)境指定的參數(shù)dformat,monthlist,yearopt,minate和maxdate的默認值的來源:

  • 如果localeopt = 0,則所有這些參數(shù)均采用當前的語言環(huán)境定義默認值。
  • 如果localeopt = 1,則所有這些參數(shù)均采用ODBC默認值。
  • 如果未指定localeopt,則dformat參數(shù)確定這些參數(shù)的默認值。如果dformat = 3,則使用ODBC默認值。如果dformat為18、19、20或21,則無論當前語言環(huán)境定義如何,都使用回教日期格式默認值。對于所有其他dformat值,使用當前的語言環(huán)境定義默認值。

不能更改ODBC語言環(huán)境。它用于格式化日期字符串,這些日期字符串在選擇了不同的國家語言支持(NLS)的Caché流程之間可移植。如果localeopt = 1,則ODBC區(qū)域設(shè)置日期定義如下:

  • 日期格式默認為3。因此,如果dformat未定義或為-1,則使用日期格式3。
  • 日期分隔符默認為“/”。但是,日期格式默認為3,該格式始終使用“-”作為日期分隔符。
  • Year選項默認為4位數(shù)字。
  • 最小和最大日期:0和2980013($HOROLOG日期計數(shù))。
  • 使用英語月份名稱,月份縮寫,工作日名稱和工作日縮寫。

示例

日期格式示例

下面的示例說明$ZDATE如何返回當前日期的各種dformat格式。 yearopt采用默認值。當然,日期分隔符以及月份和星期幾的名稱和縮寫取決于語言環(huán)境。本示例使用當前的用戶區(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 2020111116=Japanese date format 2020111117=Japanese date format with spaces

下面的示例將日期與區(qū)域設(shè)置進行比較,該區(qū)域設(shè)置默認為當前用戶區(qū)域設(shè)置與日期(當localeopt = 1激活ODBC區(qū)域設(shè)置定義時)。為了使該示例更有趣,將當前用戶區(qū)域設(shè)置設(shè)置為法語:

/// 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-111: 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=20201111日 ODBC=2020111117: local=20201111日 ODBC=20201111

兩位數(shù)的年份滑動窗口示例

為了說明如何使用顯式滑動窗口,假設(shè)在1997年輸入以下函數(shù)調(diào)用。59461的日期表示2003年10月19日; hd的日期為2003年10月19日。 dformat 1允許它返回兩位數(shù)或四位數(shù)的年份,yearopt 5可以指定四位數(shù)年份的滑動窗口。由于使用了yearopt設(shè)置,因此通過加法和減法來計算相對于當年(在本例中為1997)的startwin和endwin。

DHC-APP>WRITE $ZDATE(59461,1,,5,90,10) 10/19/03

用于將年份顯示為兩位數(shù)的滑動窗口從1/1/1907擴展到12/31/2006。因此,Caché將日期顯示為10/19/03。

日期范圍示例

下面的示例使用mindate和maxdate測試可能的出生日期。 maxdate假定出生日期不能在將來。這位思想家假設(shè)列出的任何人都不會超過124歲。日期以$HOROLOG格式指定:

/// d ##class(PHA.TEST.Function).ZDATE8() ClassMethod ZDATE8() {SET bdateh(1)=62142SET bdateh(2)=16800SET bdateh(3)=70000DO $SYSTEM.Process.ZDateNull(1)SET maxdate=$PIECE($HOROLOG,",",1)+1SET 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輸入值中有兩個不在出生日期測試的日期范圍之內(nèi):16800(12/30/1886)在124年前,而70000(08/26/2032)在將來。默認情況下,這些$ZDATE調(diào)用將生成錯誤,但是由于設(shè)置了ZDateNull(1),它們將返回空字符串(“”)。

注意

$ZDATE的值無效

在以下情況下,收到<FUNCTION> 錯誤:

  • 如果指定了無效的dformat代碼(小于-1或大于17的整數(shù)值,或者非整數(shù)值)。
  • 如果在yearopt為3或5時未指定startwin值。

在以下情況下,會收到<ILLEGAL VALUE>錯誤:

  • 如果為hdate指定了無效值,并且不提供錯誤值或設(shè)置ZDateNull(如下所述)。
  • 如果給定的月份數(shù)大于monthlist中的月份數(shù)。
  • 如果maxdate小于主意。
  • 如果endwin小于startwin。
  • 如果startwin和endwin指定滑動時間窗口,其持續(xù)時間大于100年。

在以下情況下,收到<VALUE OUT OF RANGE>錯誤:

  • 如果指定的hdate值超出有效日期范圍。對于標準Caché,它是0到298013。對于ISM兼容的Caché,它是1到94232。可以使用%SYSTEM.Process類的ZDateNull()方法來設(shè)置日期范圍和當前進程的無效日期行為。
  • 如果指定的其他有效日期超出了為maxdate和mindate假定的值所定義的范圍,并且不提供錯誤的值。

使用$ZDATE代替實用程序

需要在$ZDATE函數(shù)和date實用程序之間進行選擇時,請記住以下幾點:

  • 可以使用$ZDATE函數(shù)代替%DO或%D實用程序的大多數(shù)現(xiàn)有入口點。
  • 可以直接調(diào)用$ZDATE($HOROLOG,7)而不是調(diào)用INT ^%D。這以“ MM DD [YY] YY”格式提供當前日期。
  • $ZDATEH和$ZDATE比調(diào)用%DATE,%DI或%DO的入口點快得多。

總結(jié)

以上是生活随笔為你收集整理的第八十三章 Caché 函数大全 $ZDATE 函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。