説明
UNIX_TIMESTAMP は、UNIX® タイムスタンプ ('1970-01-01 00:00:00' からの秒数 (および秒の小数部)) を返します。
date-expression が指定されていない場合、現在の UTC タイムスタンプが date-expression の既定値として使用されます。したがって、UNIX_TIMESTAMP() は、システム全体の既定の 3 の精度を前提とする UNIX_TIMESTAMP(GETUTCDATE(3)) と同等になります。
date-expression が指定されている場合、UNIX_TIMESTAMP は、UNIX タイムスタンプの秒数を計算して、指定されている date-expression 値を UNIX タイムスタンプに変換します。UNIX_TIMESTAMP は、正または負の秒数を返すことができます。
UNIX_TIMESTAMP は、その値をデータ型 %Library.Numeric として返します。秒の小数部の精度を返すことができます。date-expression が指定されていない場合、現在構成されているシステム全体の精度が使用されます。date-expression が指定されている場合、その date-expression の精度が使用されます。
date-expression 値
オプションの date-expression は、以下の値として指定できます。
UNIX_TIMESTAMP ではタイムゾーンの変換は行われません。date-expression が UTC 時刻である場合、UTC UnixTime が返されます。date-expression がローカル時刻である場合、ローカル UnixTime 値が返されます。
秒の小数部の精度
秒の小数部は、丸められずに、常に指定された精度に切り捨てられます。
精度の構成
既定の精度は、以下の方法で構成できます。
返される精度の小数点以下の桁数の既定値に 0 ~ 9 の整数を指定します。既定値は 0 です。実際に返される精度はプラットフォームに依存し、システムで使用可能な精度を超えた precision の桁はゼロとして返されます。
日付/時刻関数の比較
UNIX_TIMESTAMP は、任意の日付からの経過秒数として表される日付と時刻を返します。
TO_POSIXTIME は、UNIX タイムスタンプから計算される、エンコードされた 64 ビットの符号付きの値 (%PosixTime タイムスタンプ) を返します。
GETUTCDATE は、%TimeStamp (ODBC タイムスタンプ) データ型または %PosixTime (エンコードされた 64 ビットの符号付き整数) データ型の値として、ユニバーサルな (タイムゾーンに依存しない) 日付と時刻を返します。 %PosixTime 値は、対応する UNIX タイムスタンプ値から計算されます。%PosixTime のエンコードにより、迅速にタイムスタンプの比較や計算を行うことが容易になります。%Library.PosixTimeOpens in a new tab クラスには、UNIX タイムスタンプを PosixTime タイムスタンプに変換する UnixTimeToLogical()Opens in a new tab メソッド、および PosixTime タイムスタンプを UNIX タイムスタンプに変換する LogicalToUnixTime()Opens in a new tab メソッドがあります。これらのメソッドは、どちらもタイムゾーンの変換を行いません。
ObjectScript $ZTIMESTAMP 特殊変数を使用して、ユニバーサルな (タイムゾーンに依存しない) タイムスタンプを返すこともできます。
ObjectScript $ZDATETIME 関数の dformat -2 は、InterSystems IRIS $HOROLOG 日付を取り、UNIX タイムスタンプを返します。$ZDATETIMEH dformat -2 は、UNIX タイムスタンプを取り、InterSystems IRIS %HOROLOG 日付を返します。これらの ObjectScript 関数は、ローカル時刻を UTC 時刻に変換します。UNIX_TIMESTAMP は、ローカル時刻を UTC 時刻に変換しません。
例
以下の例では、UTC UNIX タイムスタンプを返しています。最初の select-item では date-expression の既定値が使用されており、2 番目の select-item では明示的な UTC タイムスタンプが指定されています。
SELECT
UNIX_TIMESTAMP() AS DefaultUTC,
UNIX_TIMESTAMP(GETUTCDATE(3)) AS ExplicitUTC
以下の例では、現在のローカル日付とローカル時刻のローカル UNIX タイムスタンプ、および UTC 日付値と UTC 時刻値の UTC UNIX タイムスタンプを返しています。最初の select-item ではローカル CURRENT_TIMESTAMP、2 番目の select-item では $HOROLOG (ローカル日付とローカル時刻)、3 番目の select-item では現在の UTC 日付と UTC 時刻が指定されています。
SELECT
UNIX_TIMESTAMP(CURRENT_TIMESTAMP(2)) AS CurrTSLocal,
UNIX_TIMESTAMP($HOROLOG) AS HorologLocal,
UNIX_TIMESTAMP(GETUTCDATE(3)) AS ExplicitUTC
以下の例では、UNIX_TIMESTAMP (ローカル時刻を変換しません) と $ZDATETIME (ローカル時刻を変換します) を比較しています。
SET unixutc=$ZDATETIME($HOROLOG,-2)
SET myquery = "SELECT UNIX_TIMESTAMP($HOROLOG) AS UnixLocal,? AS UnixUTC"
SET tStatement = ##class(%SQL.Statement).%New()
SET qStatus = tStatement.%Prepare(myquery)
IF qStatus'=1 {WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT}
SET rset = tStatement.%Execute(unixutc)
DO rset.%Display()