13.33 Timestampクラス
このクラスは、SQLの標準TIMESTAMP WITH TIME ZONE
型とTIMESTAMP WITHOUT TIME ZONE
型をサポートしており、すべてのデータベースのTIMESTAMP
型(TIMESTAMP
、TIMESTAMP WITH TIME ZONE
およびTIMESTAMP WITH LOCAL TIME ZONE
)で動作します。
時、分、秒、小数秒など、Timestamp
の時間コンポーネントはTimestamp
に対して指定されたタイム・ゾーンのものです。これはリリース10gの新しい動作であり、以前のバージョンでは時間コンポーネントのGMT値がサポートされていました。時間コンポーネントは、データベースへの格納時にTimestamp
で指定されたタイム・ゾーンにのみ変換されました。たとえば、次のTimestamp()のコールでは、Timestamp
値13-Nov 2003 17:24:30.0
がタイム・ゾーン+5:30
で作成されます。
Timestamp ts(env, 2003, 11, 13, 17, 24, 30, 0, 5, 30);
以前のリリースの場合、このコールの動作ではタイムスタンプ・コンポーネントがGMTとして解析され、タイム・ゾーン+5:30
のタイムスタンプ値13-Nov 2003 11:54:30.0
が作成されていました。コンストラクタをコールする前に、このタイムスタンプをGMTに変換する必要がありました。GMTタイム・ゾーンの場合、時と分はどちらも0
(ゼロ)です。
この動作変更は、setDate()メソッドとsetTime()メソッドにも適用されます。
表13-49は、Timestamp
クラスのフィールドとその有効範囲を示しています。パラメータが範囲外の場合はSQLException
が発生します。
表13-49 Timestampのフィールドとその有効範囲
フィールド | 型 | 最小値 | 最大値 |
---|---|---|---|
|
int |
|
|
|
unsigned int |
|
|
|
unsigned int |
|
|
|
unsigned int |
|
|
|
unsigned int |
|
|
|
unsigned int |
|
|
|
int |
|
|
|
int |
|
|
表13-50 Timestampメソッドの概要
メソッド | 概要 |
---|---|
|
|
文字列で指定されている値からタイムスタンプを設定します。 |
|
|
|
|
|
タイム・ゾーンの時および分のオフセット値を戻します。 |
|
値(タイムスタンプの値+時間隔)が設定された |
|
値(タイムスタンプの値-時間隔)が設定された |
|
|
|
単純割当てを行います。 |
|
aとbが等しいかどうかをチェックします。 |
|
aとbが等しくないかどうかをチェックします。 |
|
aがbを超えているかどうかをチェックします。 |
|
aがb以上かどうかをチェックします。 |
|
aがb未満かどうかをチェックします。 |
|
aがb以下かどうかをチェックします。 |
|
このタイムスタンプの年、月、日のコンポーネントを設定します。 |
|
Timestampの値を |
|
このタイムスタンプの日、時、分、秒および小数秒の要素を設定します。 |
|
タイム・ゾーンの時および分のオフセットを設定します。 |
|
タイムスタンプの値- |
|
タイムスタンプの値- |
|
タイムスタンプを示す |
13.33.1 Timestamp()
Timestamp
クラスのコンストラクタです。
構文 | 説明 |
---|---|
Timestamp( const Environment *env, int year=1, unsigned int month=1, unsigned int day=1, unsigned int hour=0, unsigned int min=0, unsigned int sec=0, unsigned int fs=0, int tzhour=0, int tzmin=0); |
デフォルトの |
Timestamp(); |
|
Timestamp( const Environment *env, int year, unsigned int month, unsigned int day, unsigned int hour, unsigned int min, unsigned int sec, unsigned int fs, const string &timezone); |
これはマルチバイト・サポート用です。タイム・ゾーンは、リージョンUS/EasternまたはGMTからのオフセット+05:30として渡すことができます。空の文字列を渡すと、時刻は現行のセッションのタイム・ゾーンによるものとみなされます。この構文は、 |
Timestamp( const Environment *env, int year, unsigned int month, unsigned int day, unsigned int hour, unsigned int min, unsigned int sec, unsigned int fs, const UString &timezone); |
UTF16 ( |
Timestamp( const Timestamp &src); |
コピー・コンストラクタです。 |
パラメータ | 説明 |
---|---|
year |
年のコンポーネントを指定します。 |
month |
月のコンポーネントを指定します。 |
day |
日のコンポーネントを指定します。 |
hour |
時のコンポーネントを指定します。 |
minute |
分のコンポーネントを指定します。 |
second |
秒のコンポーネントを指定します。 |
fs |
小数秒のコンポーネントを指定します。 |
tzhour |
タイム・ゾーンの時差のコンポーネントを指定します。 |
tzmin |
タイム・ゾーンの分の違いのコンポーネントを指定します。 |
src |
元の |
例13-11 デフォルトのTimestampコンストラクタの使用
この例では、デフォルト・コンストラクタによるNULL
値の作成と、Timestamp
にNULL
以外の値を割り当て、それに基づいて操作を実行する方法が示されています。
Environment *env = Environment::createEnvironment(); //create a null timestamp Timestamp ts; if(ts.isNull()) cout << "\n ts is Null"; //assign a non null value to ts Timestamp notNullTs(env, 2000, 8, 17, 12, 0, 0, 0, 5, 30); ts = notNullTs; //now all operations are valid on ts int yr; unsigned int mth, day; ts.getDate(yr, mth, day);
例13-12 NULLのTimestampインスタンスを初期化するためのfromText()メソッドの使用
次のコード例では、NULL
のタイムスタンプを初期化するためにfromText()メソッドを使用する方法が示されています。
Environment *env = Environment::createEnvironment(); Timestamp ts1; ts1.fromText("01:16:17.12 04/03/1825", "hh:mi:ssxff dd/mm/yyyy", "", env);
例13-13 データベースに格納されているタイムスタンプの比較
次のコード例では、結果セットからタイムスタンプ列を取得してタイムスタンプがNULL
かどうかをチェックし、文字列フォーマットでタイムスタンプの値を取得して2つのタイムスタンプの差異を判断する方法が示されています。
Timestamp reft(env, 2001, 1, 1); ResultSet *rs=stmt->executeQuery( "select order_date from orders where customer_id=1"); rs->next(); //retrieve the timestamp column from result set Timestamp ts=rs->getTimestamp(1); //check timestamp for null if(!ts.isNull()) { string tsstr=ts.toText( //get the timestamp value in string format "dd/mm/yyyy hh:mi:ss [tzh:tzm]",0); if(reft<ts //compare timestamps IntervalDS ds=reft.subDS(ts); //get difference between timestamps }
13.33.2 fromText()
文字列で指定されている値からタイムスタンプを設定します。文字列は指定された書式であることが必要です。nlsParam
が指定されている場合は、この指定によって、変換に使用されるNLSパラメータが決まります。nlsParam
が指定されていない場合、NLSパラメータは指定された環境から選択されます。環境が指定されていない場合、グローバリゼーション・サポート・パラメータはインスタンスに関連付けられている環境から選択されます(関連付けられている場合)。
Timestamp
オブジェクトをstring
またはUString
が表す値に設定します。
値はfmt
およびnlsParam
パラメータに基づいて解析されます。nlsParam
が渡されない場合は、envp
パラメータのグローバリゼーション・サポート設定が使用されます。
関連項目:
TO_DATE
の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
構文 | 説明 |
---|---|
void fromText( const string ×tmpStr, const string &fmt, const string &nlsParam = "", const Environment *env = NULL); |
|
void fromText( const UString ×tmpStr, const UString &fmt, const UString &nlsParam, const Environment *env = NULL); |
|
パラメータ | 説明 |
---|---|
timestmpStr |
|
fmt |
書式文字列を指定します。 |
nlsParam |
NLSパラメータ文字列を指定します。 |
env |
OCCI環境を指定します。グローバリゼーション対応バージョンのメソッドでは、 |
13.33.3 getDate()
Timestamp
の年、月および日の値を戻します。
構文
void getDate( int &year, unsigned int &month, unsigned int &day) const;
パラメータ | 説明 |
---|---|
year |
年のコンポーネントを指定します。 |
month |
月のコンポーネントを指定します。 |
day |
日のコンポーネントを指定します。 |
13.33.4 getTime()
時、分、秒および小数秒のコンポーネントを戻します。
構文
void getTime( unsigned int &hour, unsigned int &minute, unsigned int &second, unsigned int &fs) const;
パラメータ | 説明 |
---|---|
hour |
時のコンポーネントを指定します。 |
minute |
分のコンポーネントを指定します。 |
second |
秒のコンポーネントを指定します。 |
fs |
小数秒のコンポーネントを指定します。 |
13.33.5 getTimeZoneOffset()
タイム・ゾーン・オフセットを時および分で戻します。
構文
void getTimeZoneOffset( int &hour, int &minute) const;
パラメータ | 説明 |
---|---|
hour |
タイム・ゾーンの時を指定します。 |
minute |
タイム・ゾーンの分を指定します。 |
13.33.6 intervalAdd()
タイムスタンプに時間隔を加算します。
構文 | 説明 |
---|---|
const Timestamp intervalAdd( const IntervalDS& val) const; |
タイムスタンプにIntervalDSの時間隔を加算します。 |
const Timestamp intervalAdd( const IntervalYM& val) const; |
タイムスタンプにIntervalYMの時間隔を加算します。 |
パラメータ | 説明 |
---|---|
val |
加算する時間隔です。 |
13.33.7 intervalSub()
タイムスタンプから時間隔を減算し、その結果をタイムスタンプで戻します。Timestamp
をタイムスタンプの値- val
の値で戻します
構文 | 説明 |
---|---|
const Timestamp intervalSub( const IntervalDS& val) const; |
タイムスタンプから |
const Timestamp intervalsUB( const IntervalYM& val) const; |
タイムスタンプから |
パラメータ | 説明 |
---|---|
val |
減算する時間隔を指定します。 |
13.33.9 operator=()
指定されたTimestampオブジェクトをこのオブジェクトに割り当てます。
構文
Timestamp & operator=( const Timestamp &src);
パラメータ | 説明 |
---|---|
src |
割り当てる値を指定します。 |
13.33.10 operator==()
指定した2つのタイムスタンプを比較します。2つのタイムスタンプが等しい場合はTRUE
を、それ以外の場合はFALSE
を戻します。a
またはb
がNULL
の場合は、FALSE
を戻します。
構文
bool operator==( const Timestamp &first, const Timestamp &second);
パラメータ | 説明 |
---|---|
first |
比較対象の最初のタイムスタンプを指定します。 |
second |
比較対象の第2のタイムスタンプを指定します。 |
13.33.11 operator!=()
指定した2つのタイムスタンプを比較します。2つのタイムスタンプが等しくない場合はTRUE
を、それ以外の場合はFALSE
を戻します。どちらかのタイムスタンプがNULL
の場合はFALSE
を戻します。
構文
bool operator!=( const Timestamp &first, const Timestamp &second);
パラメータ | 説明 |
---|---|
first |
比較対象の最初のタイムスタンプを指定します。 |
second |
比較対象の第2のタイムスタンプを指定します。 |
13.33.12 operator>()
first
がsecond
より後の場合はTRUE
を、それ以外の場合はFALSE
を戻します。どちらかのタイムスタンプがNULL
の場合はFALSE
を戻します。
構文
bool operator>( const Timestamp &first, const Timestamp &second);
パラメータ | 説明 |
---|---|
first |
比較対象の最初のタイムスタンプを指定します。 |
second |
比較対象の第2のタイムスタンプを指定します。 |
13.33.13 operator>=()
指定した2つのタイムスタンプを比較します。first
タイムスタンプがsecond
タイムスタンプ以降の場合はTRUE
を、それ以外の場合はFALSE
を戻します。どちらかのタイムスタンプがNULL
の場合はFALSE
を戻します。
構文
bool operator>=( const Timestamp &first, const Timestamp &second);
パラメータ | 説明 |
---|---|
first |
比較対象の最初のタイムスタンプを指定します。 |
second |
比較対象の第2のタイムスタンプを指定します。 |
13.33.14 operator<()
first
がsecond
より前の場合はTRUE
を、それ以外の場合はFALSE
を戻します。a
またはb
がNULL
の場合は、FALSE
を戻します。
構文
bool operator<( const Timestamp &first, const Timestamp &second);
パラメータ | 説明 |
---|---|
first |
比較対象の最初のタイムスタンプを指定します。 |
second |
比較対象の第2のタイムスタンプを指定します。 |
13.33.15 operator<=()
指定した2つのタイムスタンプを比較します。第1のタイムスタンプが第2のタイムスタンプと同じか、またはそれ以前の場合はTRUE
を、それ以外の場合はFALSE
を戻します。どちらかのタイムスタンプがNULL
の場合はFALSE
を戻します。
構文
bool operator<=( const Timestamp &first, const Timestamp &second);
パラメータ | 説明 |
---|---|
first |
比較対象の最初のタイムスタンプを指定します。 |
second |
比較対象の第2のタイムスタンプを指定します。 |
13.33.16 setDate()
このタイムスタンプの年、月、日の要素を設定します。
構文
void setDate( int year, unsigned int month, unsigned int day);
パラメータ | 説明 |
---|---|
year |
年のコンポーネントを指定します。有効な値は、-4713から9999です。 |
month |
月のコンポーネントを指定します。有効な値は、1から12です。 |
day |
日のコンポーネントを指定します。有効な値は、1から31です。 |
13.33.18 setTime()
このタイムスタンプの日、時、分、秒および小数秒の要素を設定します。
構文
void setTime( unsigned int hour, unsigned int minute, unsigned int second, unsigned int fs);
パラメータ | 説明 |
---|---|
hour |
時のコンポーネントを指定します。有効な値は、0から23です。 |
minute |
分のコンポーネントを指定します。有効な値は、0から59です。 |
second |
秒のコンポーネントを指定します。有効な値は、0から59です。 |
fs |
小数秒のコンポーネントを指定します。 |
13.33.19 setTimeZoneOffset()
タイム・ゾーンの時および分のオフセットを設定します。
構文
void setTimeZoneOffset( int hour, int minute);
パラメータ | 説明 |
---|---|
hour |
タイム・ゾーンの時を指定します。有効な値は、-12から12です。 |
minute |
タイム・ゾーンの分を指定します。有効な値は、-59から59です。 |
13.33.20 subDS()
このタイムスタンプと指定されたタイムスタンプとの差を計算し、その差をIntervalDS
で戻します。
構文
const IntervalDS subDS( const Timestamp& val) const;
パラメータ | 説明 |
---|---|
val |
減算するタイムスタンプを指定します。 |
13.33.21 subYM()
2つのタイムスタンプの値の差を計算し、その差をIntervalYM
で戻します。
構文
const IntervalYM subYM( const Timestamp& val) const;
パラメータ | 説明 |
---|---|
val |
減算する |
13.33.22 toText()
タイムスタンプを表すstring
またはUString
を、指定された書式で戻します。
nlsParam
が指定されている場合は、この指定によって、変換に使用されるNLSパラメータが決まります。nlsParam
が指定されていない場合は、NLSパラメータがインスタンスに関連付けられている環境から選択されます(関連付けられている場合)。
関連項目:
TO_DATE
の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
構文 | 説明 |
---|---|
string toText( const string &fmt, unsigned int fsprec, const string &nlsParam = "") const; |
タイムスタンプを示す |
UString toText( const UString &fmt, unsigned int fsprec, const UString &nlsParam) const; |
タイムスタンプを表す |
パラメータ | 説明 |
---|---|
fmt |
書式文字列を指定します。 |
fsprec |
|
nlsParam |
|