第九十六章 Caché 函數大全 $ZTIME 函數
驗證時間,並將其從內部格式轉換爲指定的顯示格式。
大綱
$ZTIME(htime,tformat,precision,erropt,localeopt)
$ZT(htime,tformat,precision,erropt,localeopt)
參數
- htime 可以指定爲數值、變量名或表達式的內部系統時間。
- tformat 可選—一個整數值,指定要以何種格式返回時間值。
- precision 可選-一個數值,指定要用來表示時間的小數位數。如果省略,小數秒將被截斷。
- erropt 可選-如果認爲htime參數無效,則返回表達式。
- localeopt 可選-指定要使用的區域設置的布爾標誌。爲0時,當前區域設置確定時間分隔符以及用於格式化時間的其他字符、字符串和選項。爲1時,ODBC區域設置確定這些字符、字符串和選項。ODBC區域設置不能更改;它用於格式化日期和時間字符串,這些字符串可以在做出不同國家語言支持(NLS)選擇的Caché進程之間移植。默認值爲0。
指定參數值之間的省略參數由佔位符逗號表示。尾隨佔位符逗號不是必需的,但允許使用。逗號之間允許使用空格表示省略的參數。
描述
$ZTIME
函數將內部系統時間(htime)轉換爲可打印格式,htime是以時間格式從特殊變量$HOROLOG
或$ZTIMESTAMP
指定的。如果不使用可選參數,時間將以“hh:mm:ss”
格式返回;其中“hh”
是24小時制中的小時,“mm”
是分鐘,“ss”
是秒。否則,時間將以TF format和precision參數的值指定的格式返回。
參數
htime
該值表示自午夜以來經過的秒數。它是$HOROLOG
值的第二個組成部分,可以使用$PIECE($HOROLOG,",",2)
進行提取。 htime可以是整數,也可以是帶有由precision指定的精度的小數位數的小數。
對於tformat值–1到4,htime有效值的整數部分必須在0到86399的範圍內。(-0視爲0。)此範圍之外的值會產生錯誤。對於tformat值9和10,htime有效值還可以包括負數和大於86399的數。
tformat
支持的值如下:
tformat | 描述 |
---|---|
-1 | 從當前語言環境的TimeFormat 屬性獲取有效格式值,默認爲1。這是默認行爲,如果未指定tformat且localeopt未指定或爲0。 |
1 | 以“ hh:mm:ss” 的形式表示時間(24小時制)。 |
2 | 以“ hh:mm” 的形式表示時間(24小時制)。 |
3 | 以“ hh:mm:ss [AM / PM]” 的形式表示時間(12小時制)。 |
4 | 以“ hh:mm [AM / PM]” 的形式表示時間(12小時制)。 |
9 | 對於MultiValue支持。與tformat 1(“ hh:mm:ss” 24小時制)相同,其數值介於0到86399之間。還接受負時間值和大於86399的時間值。 |
10 | 對於MultiValue支持。與tformat 2(“ hh:mm” 24小時制)相同,其數值介於0到86399之間。還接受負時間值和大於86399的時間值。 |
若要確定語言環境的默認時間格式,請調用GetFormatItem()
NLS類方法:。
DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("TimeFormat")
1
在12小時制的時鐘格式中,早上和晚上由時間後綴表示,此處顯示爲AM和PM。若要確定語言環境的默認時間後綴,請調用以下NLS類方法:
DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("AM")
AM
DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("PM")
PM
tformat 9 and 10
提供了時間格式9和10以支持MultiValue。對於在ObjectScript允許範圍內的所有內部時間值:0到86399,它們與tformats 1和2相同。與其他時間格式一樣,-0被視爲0。
時間格式9和10接受負數值,並返回相應的負時間值。 tformat 9返回一個負的htime作爲“ -hh:mm:ss”(24小時制)。 tformat 10返回的負htime爲“ -hh:mm”(24小時制)。對於時間格式10,“ – 59.9”返回“ –00:00”,“ – 60”返回“ –00:01”。
時間格式9和10接受大於86399的數值,並返回相應的時間。對於時間格式10,“ 86400”返回“ 24:00”,“ 400000”返回“ 111:06”。
時間格式9對於所有數值,返回整秒,並可選地返回小數秒。 precision參數指定小數秒的位數。
precision
該功能顯示精確度參數中指定的小數秒後的小數秒數。例如,如果輸入精度值3,則$ZTIME
會將小數秒顯示爲小數點後三位。如果輸入值9,$ZTIME
將顯示小數秒到小數點後九位。支持的值如下:
Value | Description |
---|---|
-1 | 從當前語言環境的TimePrecision 屬性獲取精度值,默認爲0。這是默認行爲,如果未指定precision。 |
n | 大於或等於0的值導致將時間表示爲n個小數位。 |
0 | 如果設置爲0或默認值爲0,則小數秒將被截斷。 |
若要確定語言環境的默認時間精度,請調用GetFormatItem()
NLS類方法:
DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("TimePrecision")
0
erropt
此參數禁止顯示與無效的htime值相關的錯誤消息。該函數將返回erropt指示的值,而不是生成錯誤<ILLEGAL VALUE>
消息。
localeopt
此參數選擇用戶的當前語言環境定義(0)或ODBC語言環境定義(1)作爲時間選項的來源。不能更改ODBC語言環境。它用於格式化日期和時間字符串,這些日期和時間字符串在做出了不同的國家語言支持(NLS)選擇的Caché流程之間可移植。
ODBC語言環境時間定義如下:
- 時間格式默認爲1。時間分隔符爲“:”。時間精度爲0(無小數秒)。
- AM和PM指示器分別爲“AM”和“PM”。使用單詞"Noon" and "Midnight"。
示例
要使用特殊變量$HOROLOG
返回當前本地時間,必須使用$PIECE
函數指定$HOROLOG
的第二部分。以下內容以24小時制“13:55:11”
返回時間:
DHC-APP>WRITE $ZTIME($PIECE($HOROLOG,",",2),1)
09:00:57
在下面的示例中,將htime設置爲當前時間的$PIECE($HOROLOG,",",2)
。這些示例說明如何使用$ZTIME
的各種形式返回不同的時間格式。
以下示例在許多情況下以“13:28:55”
的格式返回時間;但是,此格式取決於語言環境:
DHC-APP>SET htime=$PIECE($HOROLOG,",",2)
DHC-APP>WRITE $ZTIME(htime)
09:02:44
以下示例以“13:28:55.999”
格式返回時間:
DHC-APP>SET htime=$PIECE($HOROLOG,",",2)
DHC-APP>WRITE $ZTIME(htime,1,3)
09:03:46.000
以下示例以“13:28:55.999999999”
格式返回時間:
DHC-APP>SET htime=$PIECE($HOROLOG,",",2)
DHC-APP>WRITE $ZTIME(htime,1,9)
09:03:46.000000000
以下示例以“13:28”
格式返回時間:
DHC-APP>SET htime=$PIECE($HOROLOG,",",2)
DHC-APP>WRITE $ZTIME(htime,2)
09:03
以下示例以“01:28:24 PM”
格式返回時間:
DHC-APP>SET htime=$PIECE($HOROLOG,",",2)
DHC-APP>WRITE $ZTIME(htime,3)
09:03:46AM
以下示例以“01:28 PM”
格式返回時間:
DHC-APP>SET htime=$PIECE($HOROLOG,",",2)
DHC-APP>WRITE $ZTIME(htime,4)
09:03AM
下面的示例以“13:45:56.021”
的格式返回時間,即當前UTC時間,精度爲小數點後三位:
DHC-APP>SET t=$ZTIME($PIECE($ZTIMESTAMP,",",2),1,3)
DHC-APP>WRITE "Current UTC time is ",t
Current UTC time is 01:05:47.548
注意
無效的參數值
- 如果指定了無效的tformat值,則會收到
<FUNCTION>
錯誤。 - 如果htime指定的值超出0到86399(含)的允許範圍,並且不提供
<ILLEGAL VALUE>
錯誤值,則除9和10以外的所有tformat都會收到錯誤。
Decimal Delimiter
$ZTIME
將使用當前語言環境的DecimalSeparator
屬性的值作爲整數的整數和小數部分之間的分隔符。 DecimalSeparator
的默認值爲“。”;所有文檔示例都使用此定界符。
若要確定語言環境的默認十進制分隔符,請調用GetFormatItem()
NLS類方法
DHC-APP> WRITE ##class(%SYS.NLS.Format).GetFormatItem("DecimalSeparator")
.
Time Delimiter
默認情況下,Caché使用當前語言環境的TimeSeparator
屬性的值來確定時間字符串的定界符。默認情況下,分隔符爲“:”
;所有文檔示例都使用此定界符。
若要確定語言環境的默認時間分隔符,請調用以下NLS類方法:
DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("TimeSeparator")
:
時間後綴
默認情況下,Caché使用當前語言環境中的屬性來確定其時間後綴的名稱。對於$ZTIME
,這些屬性(及其相應的默認值)爲:
- AM (“AM”)
- PM (“PM”)
本文檔將始終對這些屬性使用這些默認值。
若要確定語言環境的默認時間後綴,請調用以下NLS類方法:
DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("AM")
AM
DHC-APP>WRITE ##class(%SYS.NLS.Format).GetFormatItem("PM")
PM