COleDateTime クラス
OLE オートメーションで使用される DATE データ型をカプセル化します。
構文
class COleDateTime
メンバー
パブリック コンストラクター
| 名前 | 説明 |
|---|---|
| COleDateTime::COleDateTime | COleDateTime オブジェクトを構築します。 |
パブリック メソッド
| 名前 | 説明 |
|---|---|
| COleDateTime::Format | COleDateTime オブジェクトの書式設定された文字列表現を生成します。 |
| COleDateTime::GetAsDBTIMESTAMP | COleDateTime オブジェクトの日時を DBTIMESTAMP データ構造体として取得するには、このメソッドを呼び出します。 |
| COleDateTime::GetAsSystemTime | COleDateTime オブジェクトの日時を SYSTEMTIME データ構造体として取得するには、このメソッドを呼び出します。 |
| COleDateTime::GetAsUDATE | COleDateTime の時刻を UDATE データ構造体として取得するには、このメソッドを呼び出します。 |
| COleDateTime::GetCurrentTime | 現在の時刻を表す COleDateTime オブジェクトを作成します (静的メンバー関数)。 |
| COleDateTime::GetDay | この COleDateTime オブジェクトが表す日 (1 から 31) を返します。 |
| COleDateTime::GetDayOfWeek | この COleDateTime オブジェクトが表す曜日 (日曜日 = 1) を返します。 |
| COleDateTime::GetDayOfYear | この COleDateTime オブジェクトが表す年間通算日 (1 月 1 日 = 1) を返します。 |
| COleDateTime::GetHour | この COleDateTime オブジェクトが表す時 (0 から 23) を返します。 |
| COleDateTime::GetMinute | この COleDateTime オブジェクトが表す分 (0 から 59) を返します。 |
| COleDateTime::GetMonth | この COleDateTime オブジェクトが表す月 (1 から 12) を返します。 |
| COleDateTime::GetSecond | この COleDateTime オブジェクトが表す秒 (0 から 59) を返します。 |
| COleDateTime::GetStatus | この COleDateTime オブジェクトの状態 (有効性) を取得します。 |
| COleDateTime::GetYear | この COleDateTime オブジェクトが表す年を返します。 |
| COleDateTime::ParseDateTime | 文字列から日付と時刻の値を読み取り、COleDateTime の値を設定します。 |
| COleDateTime::SetDate | この COleDateTime オブジェクトの値を、指定した日付のみの値に設定します。 |
| COleDateTime::SetDateTime | この COleDateTime オブジェクトの値を、指定した日付と時刻の値に設定します。 |
| COleDateTime::SetStatus | この COleDateTime オブジェクトの状態 (有効性) を設定します。 |
| COleDateTime::SetTime | この COleDateTime オブジェクトの値を、指定した時刻のみの値に設定します。 |
パブリック演算子
| 名前 | 説明 |
|---|---|
| COleDateTime::operator ==、COleDateTime::operator < など | 2 つの COleDateTime 値を比較します。 |
| COleDateTime::operator +、COleDateTime::operator - | COleDateTime 値を加算および減算します。 |
| COleDateTime::operator +=、COleDateTime::operator -= | この COleDateTime オブジェクトから COleDateTime 値を減算したり、それらを加算したりします。 |
| COleDateTime::operator = | COleDateTime 値をコピーします。 |
| COleDateTime::operator DATE、COleDateTime::operator Date* | COleDateTime 値を DATE または DATE* に変換します。 |
パブリック データ メンバー
| 名前 | 説明 |
|---|---|
| COleDateTime::m_dt | この COleDateTime オブジェクトの基になる DATE を格納します。 |
| COleDateTime::m_status | この COleDateTime オブジェクトの状態を格納します。 |
解説
COleDateTime には基底クラスはありません。
OLE オートメーションの VARIANT データ型に使用できる型の 1 つです。 COleDateTime 値は、絶対日時の値を表します。
DATE 型は、浮動小数点値として実装されます。 日数は、1899 年 12 月 30 日の午前 0 時から測定されます。 次の表は、いくつかの日付とそれに関連する値を示したものです。
| Date | 値 |
|---|---|
| 1899 年 12 月 29 日午前 0 時 | -1.0 |
| 1899 年 12 月 29 日午前 6 時 | -1.25 |
| 1899 年 12 月 30 日午前 0 時 | 0.0 |
| 1899 年 12 月 31 日午前 0 時 | 1.0 |
| 1900 年 1 月 1 日午前 6 時 | 2.25 |
注意事項
上の表で、日の値は 1899 年 12 月 30 日の午前 0 時より前は負になりますが、時の値は負になりません。 たとえば、午前 6 時は、日を表す整数が正 (1899 年 12 月 30 日より後) か負 (1899 年 12 月 30 日より前) かに関係なく、常に小数部の値 0.25 で表されます。 つまり、単純な浮動小数点比較では、1899 年 12 月 29 日午前 6:00 を表す COleDateTime は、同じ日の午前 7 時を表す値より後として、誤って並べ替えられます。
COleDateTime クラスでは、100 年 1 月 1 日から 9999 年 12 月 31 日まで処理されます。 COleDateTime クラスではグレゴリオ暦が使用されます。ユリウス暦の日付はサポートされていません。 COleDateTime では夏時間は無視されます。 (「日付と時刻: Automation のサポート」を参照)
Note
%y 形式を使用して 2 桁の年を取得できるのは、1900 年以降の日付のみです。 1900 年より前の日付に %y 形式を使用すると、コードで ASSERT エラーが発生します。
この型は、日付のみまたは時刻のみの値を表すためにも使用されます。 慣例により、時刻のみの値には日付 0 (1899 年 12 月 30 日) が使用され、日付のみの値には時刻 00:00 (午前 0 時) が使用されます。
100 未満の日付を使用して COleDateTime オブジェクトを作成した場合、その日付は受け入れられますが、その後の GetYear、GetMonth、GetDay、GetHour、GetMinute、GetSecond の呼び出しは失敗して -1 が返されます。 以前は 2 桁の日付を使用できましたが、MFC 4.2 以降では、日付は 100 以上である必要があります。
問題を回避するには、4 桁の日付を指定してください。 たとえば、次のように入力します。
COleDateTime mytime(1996, 1, 1, 0, 0, 0);
COleDateTime 値の基本的な算術演算には、コンパニオンクラス COleDateTimeSpan を使用します。 COleDateTimeSpan 値では時間間隔を定義します。 これらのクラス間の関係は、CTime と CTimeSpan の間の関係に似ています。
COleDateTime クラスと COleDateTimeSpan クラスの詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
要件
ヘッダー: ATLComTime.h
COleDateTime の関係演算子
比較演算子。
bool operator==(const COleDateTime& date) const throw();
bool operator!=(const COleDateTime& date) const throw();
bool operator<(const COleDateTime& date) const throw();
bool operator>(const COleDateTime& date) const throw();
bool operator<=(const COleDateTime& date) const throw();
bool operator>=(const COleDateTime& date) const throw();
パラメーター
date
比較される COleDateTime オブジェクト。
注釈
注意
2 つのオペランドのいずれかが無効な場合、ATLASSERT が発生します。
例
COleDateTime dateOne(1995, 3, 15, 12, 0, 0); // 15 March 1995 12 noon
COleDateTime dateTwo(dateOne); // 15 March 1995 12 noon
BOOL b;
b = dateOne == dateTwo; // TRUE
b = dateOne < dateTwo; // FALSE, same value
b = dateOne > dateTwo; // FALSE, same value
b = dateOne <= dateTwo; // TRUE, same value
b = dateOne >= dateTwo; // TRUE, same value
dateTwo.SetStatus(COleDateTime::invalid);
b = dateOne == dateTwo; // FALSE, different status
b = dateOne != dateTwo; // TRUE, different status
演算子 >=、<=、>、< は、COleDateTime オブジェクトが null に設定されている場合にアサートします。
VARIANT v = {};
v.vt = VT_NULL;
COleDateTime t1(v);
COleDateTime t2(v);
t1 = t1 + t2;
COleDateTime::COleDateTime
COleDateTime オブジェクトを構築します。
COleDateTime() throw();
COleDateTime(const VARIANT& varSrc) throw();
COleDateTime(DATE dtSrc) throw();
COleDateTime(time_t timeSrc) throw();
COleDateTime(__time64_t timeSrc) throw();
COleDateTime(const SYSTEMTIME& systimeSrc) throw();
COleDateTime(const FILETIME& filetimeSrc) throw();
COleDateTime(int nYear,
int nMonth,
int nDay,
int nHour,
int nMin,
int nSec) throw();
COleDateTime(WORD wDosDate,
WORD wDosTime) throw();
COleDateTime(const DBTIMESTAMP& timeStamp) throw();
パラメーター
dateSrc
新しい COleDateTime オブジェクトにコピーされる既存の COleDateTime オブジェクト。
varSrc
日付と時刻の値 (VT_DATE) に変換されて新しい COleDateTime オブジェクトにコピーされる既存の VARIANT データ構造体 (場合によっては COleVariant オブジェクト)。
dtSrc
新しい COleDateTime オブジェクトにコピーされる日付と時刻 (DATE) の値。
timeSrc
日付と時刻の値に変換されて新しい COleDateTime オブジェクトにコピーされる time_t または __time64_t の値。
systimeSrc
日付と時刻の値に変換されて新しい COleDateTime オブジェクトにコピーされる SYSTEMTIME 構造体。
filetimeSrc
日付と時刻の値に変換されて新しい COleDateTime オブジェクトにコピーされる FILETIME 構造体。 FILETIME では協定世界時 (UTC) が使用されるため、構造体で現地日時を渡すと、結果は正しくありません。 詳細については、Windows SDK の「ファイル時間」を参照してください。
nYear、nMonth、nDay、nHour、nMin、nSec
新しい COleDateTime オブジェクトにコピーする日付と時刻の値を示します。
wDosDate、wDosTime
日付と時刻の値に変換されて新しい COleDateTime オブジェクトにコピーされる MS-DOS の日付と時刻の値。
timeStamp
現在の現地日時が含まれる DBTimeStamp 構造体への参照。
解説
これらのすべてのコンストラクターで、指定した値に初期化された新しい COleDateTime オブジェクトが作成されます。 次の表は、日付と時刻の各コンポーネントの有効な範囲です。
| 日付と時刻のコンポーネント | 有効な範囲 |
|---|---|
| year | 100 - 9999 |
| month | 0 - 12 |
| day | 0 - 31 |
| hour | 0 - 23 |
| minute | 0 - 59 |
| second | 0 - 59 |
日コンポーネントの実際の上限は、月と年のコンポーネントによって異なることに注意してください。 詳細については、メンバー関数 SetDateTime と SetDate を参照してください。
各コンストラクターの簡単な説明を次に示します。
COleDateTime() 0 (1899 年 12 月 30 日午前 0 時) に初期化されたCOleDateTimeオブジェクトを作成します。COleDateTime(dateSrc) 既存のCOleDateTimeオブジェクトからCOleDateTimeオブジェクトを作成します。COleDateTime(varSrc)COleDateTimeオブジェクトを作成します。VARIANT構造体または COleVariant オブジェクトから日付と時刻 (VT_DATE) の値への変換を試みます。 この変換が成功した場合、変換後の値を新しいCOleDateTimeオブジェクトにコピーします。 そうでない場合は、COleDateTimeオブジェクトの値は 0 (1899 年 12 月 30 日午前 0 時) に設定され、その状態は無効になります。COleDateTime(dtSrc)DATE値からCOleDateTimeオブジェクトを作成します。COleDateTime(timeSrc)time_t値からCOleDateTimeオブジェクトを作成します。COleDateTime(systimeSrc)SYSTEMTIME値からCOleDateTimeオブジェクトを作成します。COleDateTime(filetimeSrc)FILETIME値からCOleDateTimeオブジェクトを作成します。 .FILETIMEでは協定世界時 (UTC) が使用されるため、構造体で現地日時を渡すと、結果は正しくありません。 詳細については、Windows SDK の「ファイル時間」を参照してください。COleDateTime(nYear,nMonth,nDay,nHour,nMin,nSec) 指定した数値からCOleDateTimeオブジェクトを作成します。COleDateTime(wDosDate,wDosTime) 指定した MS-DOS の日付と時刻の値からCOleDateTimeオブジェクトを作成します。
time_t データ型の詳細については、"ランタイム ライブラリ リファレンス" の time 関数を参照してください。
詳細については、Windows SDK の SYSTEMTIME および FILETIME 構造体を参照してください。
COleDateTime 値の限界の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
Note
DBTIMESTAMP パラメーターを使用するコンストラクターは、OLEDB.h がインクルードされている場合にのみ使用できます。
例
time_t osBinaryTime; // C run-time time (defined in <time.h>)
time(&osBinaryTime); // Get the current time from the
// operating system.
COleDateTime time1; // initialized to 00:00am, 30 December 1899
// (and m_nStatus is valid!)
COleDateTime time2 = time1; // Copy constructor
COleDateTime time3(osBinaryTime); // from time_t
COleDateTime time4(1999, 3, 19, 22, 15, 0); // 10:15PM March 19, 1999
SYSTEMTIME sysTime; // Win32 time information
GetSystemTime(&sysTime);
COleDateTime time5(sysTime);
COleDateTime::Format
日付と時刻の値の書式設定された表現を作成します。
CString Format(DWORD dwFlags = 0, LCID lcid = LANG_USER_DEFAULT) const;
CString Format(LPCTSTR lpszFormat) const;
CString Format(UINT nFormatID) const;
パラメーター
dwFlags
次のいずれかのロケール フラグを示します。
LOCALE_NOUSEROVERRIDE - ユーザーのカスタム設定ではなく、システムの既定のロケール設定を使用します。
VAR_TIMEVALUEONLY - 解析で日付の部分を無視します。
VAR_DATEVALUEONLY - 解析で時刻の部分を無視します。
lcid
変換に使用するロケール ID を示します。 言語識別子の詳細については、「言語識別子」を参照してください。
lpszFormat
printf の書式設定文字列に似た書式設定文字列。 前にパーセント (%) 記号の付いた各書式設定コードは、対応する COleDateTime コンポーネントに置き換えられます。 書式設定文字列内の他の文字は、返される文字列にそのままコピーされます。 詳細については、strftime ランタイム関数を参照してください。 Format の書式設定コードの値と意味は次のとおりです。
%H現在の日の時%M現在の時の分%S現在の分の秒%%パーセント記号
nFormatID
書式制御文字列のリソース ID。
戻り値
書式設定された日付と時刻の値が格納されている CString。
解説
この COleDateTime オブジェクトの状態が null の場合、戻り値は空の文字列になります。 状態が無効である場合、戻される文字列は文字列リソース ATL_IDS_DATETIME_INVALID によって指定されます。
この関数の 3 つの形式の簡単な説明を次に示します。
Format( dwFlags, lcid)
この形式では、日付と時刻の言語仕様 (ロケール ID) を使用して値の書式が設定されます。 既定のパラメーターを使用すると、この形式では日付と時刻が出力されます。ただし、時刻部分が 0 (深夜) である場合は日付のみが出力され、日付部分が 0 (1899 年 12 月 30 日) の場合は時刻だけが出力されます。 日付と時刻の値が 0 (1899 年 12 月 30 日午前 0 時) の場合、既定のパラメーターのこの形式では午前 0 時が出力されます。
Format( lpszFormat)
この形式では、printf のように、前にパーセント記号 (%) の付いた特別な書式設定コードを含む書式設定文字列を使用して、値の書式が設定されます。 書式設定文字列は、パラメーターとして関数に渡されます。 書式設定コードの詳細については、ランタイム ライブラリ リファレンスの strftime、wcsftime を参照してください。
Format( nFormatID)
この形式では、printf のように、前にパーセント記号 (%) の付いた特別な書式設定コードを含む書式設定文字列を使用して、値の書式が設定されます。 書式設定文字列はリソースです。 この文字列リソースの ID が、パラメーターとして渡されます。 書式設定コードの詳細については、"ランタイム ライブラリ リファレンス" の strftime、wcsftime を参照してください。
例
COleDateTime t(1999, 3, 19, 22, 15, 0);
CString str = t.Format(_T("%A, %B %d, %Y"));
ASSERT(str == _T("Friday, March 19, 1999"));
COleDateTime::GetAsDBTIMESTAMP
COleDateTime オブジェクトの日時を DBTIMESTAMP データ構造体として取得するには、このメソッドを呼び出します。
bool GetAsDBTIMESTAMP(DBTIMESTAMP& timeStamp) const throw();
パラメーター
timeStamp
DBTimeStamp 構造体への参照。
戻り値
正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。
解説
結果の日時は、参照されている timeStamp 構造体に格納されます。 この関数によって初期化された DBTIMESTAMP データ構造体の fraction メンバーは、0 に設定されます。
例
COleDateTime t = COleDateTime::GetCurrentTime();
DBTIMESTAMP ts;
t.GetAsDBTIMESTAMP(ts); // retrieves the time in t into the ts structure
COleDateTime::GetAsSystemTime
COleDateTime オブジェクトの日時を SYSTEMTIME データ構造体として取得するには、このメソッドを呼び出します。
bool GetAsSystemTime(SYSTEMTIME& sysTime) const throw();
パラメーター
sysTime
COleDateTime オブジェクトから変換された日時値を受け取るための SYSTEMTIME 構造体への参照。
戻り値
成功した場合は TRUE を返し、変換が失敗した場合や COleDateTime オブジェクトが NULL または無効の場合は FALSE を返します。
解説
GetAsSystemTime は、結果の日時を参照されている sysTime オブジェクトに格納します。 この関数によって初期化された SYSTEMTIME データ構造体の wMilliseconds メンバーは、0 に設定されます。
オブジェクトに保持されている状態情報の詳細については、COleDateTimeGetStatus を参照してください。
COleDateTime::GetAsUDATE
COleDateTime オブジェクトの日時を UDATE データ構造体として取得するには、このメソッドを呼び出します。
bool GetAsUDATE(UDATE& uDate) const throw();
パラメーター
uDate
COleDateTime オブジェクトから変換された日時値を受け取るための UDATE 構造体への参照。
戻り値
成功した場合は TRUE を返し、変換が失敗した場合や COleDateTime オブジェクトが NULL または無効の場合は FALSE を返します。
解説
UDATE 構造体は、"アンパックされた" 日付を表します。
COleDateTime::GetCurrentTime
現在の日時値を取得するには、この静的メンバー関数を呼び出します。
static COleDateTime WINAPI GetCurrentTime() throw();
例
// example for COleDateTime::GetCurrentTime
COleDateTime dateTest;
// dateTest value = midnight 30 December 1899
dateTest = COleDateTime::GetCurrentTime();
// dateTest value = current date and time
// a second example for COleDateTime::GetCurrentTime
// Since GetCurrentTime() is a static member, you can use it in
// a constructor:
COleDateTime t1 = COleDateTime::GetCurrentTime();
COleDateTime t2(COleDateTime::GetCurrentTime());
// Or in a normal assignment operator
COleDateTime t3;
t3 = COleDateTime::GetCurrentTime();
// or even in an expression
if (COleDateTime::GetCurrentTime().GetDayOfWeek() == 6)
_tprintf(_T("Thank Goodness it is Friday!\n\n"));
COleDateTime::GetDay
この日時値で表される月の日付を取得します。
int GetDay() const throw();
戻り値
この COleDateTime オブジェクトの値で表される月の日付、または日を取得できなかった場合は COleDateTime::error。
解説
有効な戻り値の範囲は 1 から 31 です。
この COleDateTime オブジェクトの値を照会する他のメンバー関数の詳細については、次のメンバー関数を参照してください。
例
COleDateTime t(1999, 3, 19, 22, 15, 0); // 10:15PM March 19, 1999
ASSERT(t.GetDay() == 19);
ASSERT(t.GetMonth() == 3);
ASSERT(t.GetYear() == 1999);
COleDateTime::GetDayOfWeek
この日時値で表される曜日を取得します。
int GetDayOfWeek() const throw();
戻り値
この COleDateTime オブジェクトの値で表される曜日、または曜日を取得できなかった場合は COleDateTime::error。
解説
有効な戻り値の範囲は 1 から 7 です。1 は日曜日、2 は月曜日のようになります。
この COleDateTime オブジェクトの値を照会する他のメンバー関数の詳細については、次のメンバー関数を参照してください。
例
COleDateTime t(1999, 3, 19, 22, 15, 0); // 10:15PM March 19, 1999
ASSERT(t.GetDayOfWeek() == 6); // it's a Friday
COleDateTime::GetDayOfYear
この日時値で表される年の通算日を取得します。
int GetDayOfYear() const throw();
戻り値
この COleDateTime オブジェクトの値で表される年の通算日、または年の通算日を取得できなかった場合は COleDateTime::error。
解説
有効な戻り値の範囲は 1 から 366 で、1 月 1 日が 1 です。
この COleDateTime オブジェクトの値を照会する他のメンバー関数の詳細については、次のメンバー関数を参照してください。
例
COleDateTime t(1999, 3, 19, 22, 15, 0); // 10:15PM March 19, 1999
ASSERT(t.GetDayOfYear() == 78); // 78th day of that year
COleDateTime::GetHour
この日時値によって表される時を取得します。
int GetHour() const throw();
戻り値
この COleDateTime オブジェクトの値で表される時、または時を取得できなかった場合は COleDateTime::error。
解説
有効な戻り値の範囲は 0 から 23 です。
この COleDateTime オブジェクトの値を照会する他のメンバー関数の詳細については、次のメンバー関数を参照してください。
例
COleDateTime t(1999, 3, 19, 22, 15, 0); // 10:15PM March 19, 1999
ASSERT(t.GetSecond() == 0);
ASSERT(t.GetMinute() == 15);
ASSERT(t.GetHour() == 22);
COleDateTime::GetMinute
この日時値によって表される分を取得します。
int GetMinute() const throw();
戻り値
この COleDateTime オブジェクトの値で表される分、または分を取得できなかった場合は COleDateTime::error。
解説
有効な戻り値の範囲は 0 から 59 です。
この COleDateTime オブジェクトの値を照会する他のメンバー関数の詳細については、次のメンバー関数を参照してください。
例
GetHour の例を参照してください。
COleDateTime::GetMonth
この日時値で表される月を取得します。
int GetMonth() const throw();
戻り値
この COleDateTime オブジェクトの値で表される月、または月を取得できなかった場合は COleDateTime::error。
解説
有効な戻り値の範囲は 1 から 12 です。
この COleDateTime オブジェクトの値を照会する他のメンバー関数の詳細については、次のメンバー関数を参照してください。
例
GetDay の例を参照してください。
COleDateTime::GetSecond
この日時値で表される秒を取得します。
int GetSecond() const throw();
戻り値
この COleDateTime オブジェクトの値で表される秒、または秒を取得できなかった場合は COleDateTime::error。
解説
有効な戻り値の範囲は 0 から 59 です。
Note
COleDateTime クラスでは、うるう秒はサポートされていません。
COleDateTime の実装の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
この COleDateTime オブジェクトの値を照会する他のメンバー関数の詳細については、次のメンバー関数を参照してください。
例
GetHour の例を参照してください。
COleDateTime::GetStatus
指定された COleDateTime オブジェクトの状態 (有効性) を取得します。
DateTimeStatus GetStatus() const throw();
戻り値
この COleDateTime 値の状態を返します。 既定値で作成された COleDateTime オブジェクトで GetStatus を呼び出すと、有効が返されます。 null に設定されたコンストラクターで初期化された COleDateTime オブジェクトで GetStatus を呼び出すと、GetStatus は null を返します。
解説
戻り値は、COleDateTime クラス内で定義されている DateTimeStatus 列挙型によって定義されています。
enum DateTimeStatus
{
error = -1,
valid = 0,
invalid = 1, // Invalid date (out of range, etc.)
null = 2, // Literally has no value
};
これらの状態値の簡単な説明については、次の一覧を参照してください。
COleDateTime::error日時値の一部を取得しようとしているときにエラーが発生したことを示します。COleDateTime::validこのCOleDateTimeオブジェクトが有効であることを示します。COleDateTime::invalidこのCOleDateTimeオブジェクトが無効であること、つまりその値が正しくない可能性があることを示します。COleDateTime::nullこのCOleDateTimeオブジェクトが null であること、つまりこのオブジェクトに値が指定されていないことを示します。 (これは、C++ の NULL ではなく、データベースで "値がない" ことを意味する "null" です。)
COleDateTime オブジェクトの状態は、次の場合に無効になります。
その値が、日時値に変換できなかった
VARIANTまたはCOleVariantの値から設定されている場合。その値が、有効な日時値に変換できなかった
time_t、SYSTEMTIME、またはFILETIMEの値から設定されている場合。その値が、無効なパラメーター値を使用して
SetDateTimeによって設定されている場合。このオブジェクトで、算術代入演算 (つまり
+=または-=) の間にオーバーフローまたはアンダーフローが発生した場合。このオブジェクトに無効な値が割り当てられた場合。
このオブジェクトの状態が、
SetStatusを使用して明示的に無効に設定された場合。
状態を無効に設定する可能性のある操作の詳細については、次のメンバー関数を参照してください。
COleDateTime 値の限界の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
例
COleDateTime t;
// this one is a leap year
t.SetDateTime(2000, 2, 29, 5, 0, 0);
ASSERT(t.GetStatus() == COleDateTime::valid);
// this date isn't valid
t.SetDateTime(1925, 2, 30, 5, 0, 0);
ASSERT(t.GetStatus() == COleDateTime::invalid);
// the only way to set null is to set null!
t.SetStatus(COleDateTime::null);
ASSERT(t.GetStatus() == COleDateTime::null);
COleDateTime::GetYear
この日時値によって表される年を取得します。
int GetYear() const throw();
戻り値
この COleDateTime オブジェクトの値で表される年、または年を取得できなかった場合は COleDateTime::error。
解説
有効な戻り値の範囲は 100 から 9999 で、世紀が含まれます。
この COleDateTime オブジェクトの値を照会する他のメンバー関数の詳細については、次のメンバー関数を参照してください。
COleDateTime 値の限界の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
例
GetDay の例を参照してください。
COleDateTime::m_dt
この COleDateTime オブジェクトの基になる DATE 構造体。
DATE m_dt;
解説
注意事項
この関数から返されるポインターによってアクセスされる DATE オブジェクトの値を変更すると、この COleDateTime オブジェクトの値が変更されます。 この COleDateTime オブジェクトの状態は変更されません。
DATE オブジェクトの実装の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
COleDateTime::m_status
この COleDateTime オブジェクトの状態を格納します。
DateTimeStatus m_status;
解説
このデータ メンバーの型は、COleDateTime クラス内で定義されている列挙型 DateTimeStatus です。 詳細については、COleDateTime::GetStatus を参照してください。
注意事項
このデータ メンバーは、高度なプログラミング状況のためのものです。 インライン メンバー関数 GetStatus と SetStatus を使用する必要があります。 このデータ メンバーの明示的な設定に関する他の注意点については、SetStatus を参照してください。
COleDateTime::operator =
COleDateTime 値をコピーします。
COleDateTime& operator=(const VARIANT& varSrc) throw();
COleDateTime& operator=(DATE dtSrc) throw();
COleDateTime& operator=(const time_t& timeSrc) throw();
COleDateTime& operator=(const __time64_t& timeSrc) throw();
COleDateTime& operator=(const SYSTEMTIME& systimeSrc) throw();
COleDateTime& operator=(const FILETIME& filetimeSrc) throw();
COleDateTime& operator=(const UDATE& uDate) throw();
解説
これらのオーバーロードされた代入演算子は、ソースの日時値をこの COleDateTime オブジェクトにコピーします。 これらのオーバーロードされた代入演算子の簡単な説明を次に示します。
operator =(
dateSrc) オペランドの値と状態が、このCOleDateTimeオブジェクトにコピーされます。operator =(varSrc)VARIANT 値 (または COleVariant オブジェクト) から日付と時刻 (VT_DATE) への変換が成功すると、変換後の値がこの
COleDateTimeオブジェクトにコピーされて、その状態が有効に設定されます。 変換が成功しなかった場合は、このオブジェクトの値は 0 (1899 年 12 月 30 日午前 0 時) に設定され、その状態は無効になります。operator =(
dtSrc)DATEの値がこのCOleDateTimeオブジェクトにコピーされて、その状態が有効に設定されます。operator =(
timeSrc)time_tまたは__time64_tの値が変換されて、このCOleDateTimeオブジェクトにコピーされます。 変換が成功した場合、このオブジェクトの状態は有効に設定されます。失敗した場合は、無効に設定されます。operator =(systimeSrc)SYSTEMTIME の値が変換されて、この
COleDateTimeオブジェクトにコピーされます。 変換が成功した場合、このオブジェクトの状態は有効に設定されます。失敗した場合は、無効に設定されます。operator =(
uDate)UDATEの値が変換されて、このCOleDateTimeオブジェクトにコピーされます。 変換が成功した場合、このオブジェクトの状態は有効に設定されます。失敗した場合は、無効に設定されます。UDATE構造体は、"アンパックされた" 日付を表します。 詳細については、関数 VarDateFromUdate を参照してください。operator =(
filetimeSrc)FILETIME の値が変換されて、このCOleDateTimeオブジェクトにコピーされます。 変換が成功した場合、このオブジェクトの状態は有効に設定されます。それ以外の場合は、無効に設定されます。FILETIMEでは協定世界時 (UTC) が使用されます。そのため、UTC 時刻を構造体に渡すと、結果は UTC 時刻から現地時刻に変換され、バリアント時刻として格納されます。 この動作は、Visual C++ 6.0 および Visual C++.NET 2003 SP2 と同じです。 詳細については、Windows SDK の「ファイル時間」を参照してください。
詳細については、Windows SDK の VARIANT エントリをご覧ください。
time_t データ型の詳細については、"ランタイム ライブラリ リファレンス" の time 関数を参照してください。
詳細については、Windows SDK の SYSTEMTIME および FILETIME 構造体を参照してください。
COleDateTime 値の限界の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
COleDateTime::operator +、-
ColeDateTime の値を加算および減算します。
COleDateTime operator+(COleDateTimeSpan dateSpan) const throw();
COleDateTime operator-(COleDateTimeSpan dateSpan) const throw();
COleDateTimeSpan operator-(const COleDateTime& date) const throw();
解説
COleDateTime オブジェクトは絶対時刻を表します。 COleDateTimeSpan オブジェクトは相対時刻を表します。 最初の 2 つの演算子を使用すると、COleDateTime 値からの COleDateTimeSpan 値の減算およびそれらの加算を行うことができます。 3 番目の演算子を使用すると、ある COleDateTime 値を別の値から減算して、COleDateTimeSpan 値を生成することができます。
いずれかのオペランドが null の場合、結果の COleDateTime 値の状態は null になります。
結果の COleDateTime 値が許容される値の範囲外になる場合、その COleDateTime 値の状態は無効になります。
いずれかのオペランドが無効で、もう一方が null ではない場合、結果の COleDateTime 値の状態は無効です。
COleDateTime オブジェクトが null に設定されている場合、+ および - 演算子はアサートします。 例については、「COleDateTime の関係演算子」を参照してください。
有効、無効、および null の状態値の詳細については、m_status メンバー変数を参照してください。
COleDateTime 値の限界の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
例
COleDateTime t1(1999, 3, 19, 22, 15, 0); // 10:15PM March 19, 1999
COleDateTime t2(1999, 3, 20, 22, 15, 0); // 10:15PM March 20, 1999
// Subtract 2 COleDateTimes
COleDateTimeSpan ts = t2 - t1;
// one day is 24 * 60 * 60 == 86400 seconds
ASSERT(ts.GetTotalSeconds() == 86400L);
// Add a COleDateTimeSpan to a COleDateTime.
ASSERT((t1 + ts) == t2);
// Subtract a COleDateTimeSpan from a COleDateTime.
ASSERT((t2 - ts) == t1);
COleDateTime::operator +=、-=
この COleDateTime オブジェクトから ColeDateTime 値を減算したり、それらを加算したりします。
COleDateTime& operator+=(COleDateTimeSpan dateSpan) throw();
COleDateTime& operator-=(COleDateTimeSpan dateSpan) throw();
解説
これらの演算子を使用すると、この COleDateTime から COleDateTimeSpan 値を減算したり、それらを加算したりできます。 いずれかのオペランドが null の場合、結果の COleDateTime 値の状態は null になります。
結果の COleDateTime 値が許容される値の範囲外になる場合、この COleDateTime 値の状態は無効に設定されます。
いずれかのオペランドが無効で、もう一方が null ではない場合、結果の COleDateTime 値の状態は無効です。
有効、無効、および null の状態値の詳細については、m_status メンバー変数を参照してください。
COleDateTime オブジェクトが null に設定されている場合、+= および -= 演算子はアサートします。 例については、「COleDateTime の関係演算子」を参照してください。
COleDateTime 値の限界の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
COleDateTime::operator DATE
ColeDateTime 値を DATE に変換します。
operator DATE() const throw();
解説
この演算子は、この COleDateTime オブジェクトから値がコピーされた DATE オブジェクトを返します。 DATE オブジェクトの実装の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
COleDateTime オブジェクトが null に設定されている場合、DATE 演算子はアサートします。 例については、「COleDateTime の関係演算子」を参照してください。
COleDateTime::ParseDateTime
文字列を解析して、日付と時刻の値を読み取ります。
bool ParseDateTime(
LPCTSTR lpszDate,
DWORD dwFlags = 0,
LCID lcid = LANG_USER_DEFAULT) throw();
パラメーター
lpszDate
解析対象の null で終わる文字列へのポインター。 詳細については、「解説」を参照してください。
dwFlags
ロケールの設定と解析のためのフラグを示します。 次のフラグの 1 つまたは複数:
LOCALE_NOUSEROVERRIDE - ユーザーのカスタム設定ではなく、システムの既定のロケール設定を使用します。
VAR_TIMEVALUEONLY - 解析で日付の部分を無視します。
VAR_DATEVALUEONLY - 解析で時刻の部分を無視します。
lcid
変換に使用するロケール ID を示します。
戻り値
文字列が日時値に正常に変換された場合は TRUE を返し、それ以外の場合は FALSE を返します。
解説
文字列が日時値に正常に変換された場合、この COleDateTime オブジェクトの値はその値に設定され、状態は有効になります。
Note
年の値は、100 から 9999 の範囲である必要があります (両端を含む)。
lpszDate パラメーターには、さまざまな形式を使用できます。 たとえば、次の文字列には、許容される日付と時刻の書式が含まれています。
"25 January 1996"
"8:30:00"
"20:30:00"
"January 25, 1996 8:30:00"
"8:30:00 Jan. 25, 1996"
"1/25/1996 8:30:00" // always specify the full year, even in a 'short date' format
ロケール ID は、文字列形式を日時値に変換できるかどうかにも影響します。
VAR_DATEVALUEONLY の場合は、時刻の値が 0 つまり午前 0 時に設定されます。 VAR_TIMEVALUEONLY の場合は、日付の値が 0 つまり 1899 年 12 月 30 日に設定されます。
文字列を日時値に変換できなかった場合、または数値がオーバーフローした場合、この COleDateTime オブジェクトの状態は無効になります。
COleDateTime 値の限界と実装の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
COleDateTime::SetDate
この COleDateTime オブジェクトの日付を設定します。
int SetDate(
int nYear,
int nMonth,
int nDay) throw();
パラメーター
nYear
この COleDateTime オブジェクトにコピーする年を示します。
nMonth
この COleDateTime オブジェクトにコピーする月を示します。
nDay
この COleDateTime オブジェクトにコピーする日を示します。
戻り値
この COleDateTime オブジェクトの値が正常に設定された場合は 0。それ以外の場合は 1。 この戻り値は、DateTimeStatus 列挙型に基づいて行います。 詳細については、SetStatus メンバー関数を参照してください。
解説
日付は、指定した値に設定されます。 時刻は、0 (午前 0 時) に設定されます。
パラメーター値の範囲については、次の表を参照してください。
| パラメーター | Bounds |
|---|---|
| nYear | 100 - 9999 |
| nMonth | 1 - 12 |
| nDay | 0 - 31 |
月の日付がオーバーフローした場合は、翌月の正しい日付に変換され、それに応じて月や年がインクリメントされます。 日の値が 0 の場合は、前月の最後の日を示します。 動作はと SystemTimeToVariantTime 同じです。
パラメーターで指定した日付の値が有効でない場合、このオブジェクトの状態は COleDateTime::invalid に設定されます。 GetStatus を使用して、DATE 値の有効性を確認する必要があります。m_dt の値は変更されないものと思い込まないでください。
日付の値の例を次に示します。
| nYear | nMonth | nDay | 値 |
|---|---|---|---|
| 2000 | 2 | 29 | 29 February 2000 |
| 1776 | 7 | 4 | 4 July 1776 |
| 1925 | 4 | 35 | 35 April 1925 (無効な日付) |
| 10000 | 1 | 1 | 1 January 10000 (無効な日付) |
日付と時刻の両方を設定するには、COleDateTime::SetDateTime を参照してください。
この COleDateTime オブジェクトの値を照会するメンバー関数の詳細については、次のメンバー関数を参照してください。
COleDateTime 値の限界の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
例
// set only the date, time set to midnight
dt.SetDate(1999, 3, 19);
ASSERT(dt.GetYear() == 1999);
ASSERT(dt.GetDay() == 19);
ASSERT(dt.GetMonth() == 3);
ASSERT(dt.GetHour() == 0);
ASSERT(dt.GetMinute() == 0);
ASSERT(dt.GetSecond() == 0);
// setting the time only resets the date to 1899!
dt.SetTime(22, 15, 0);
ASSERT(dt.GetYear() == 1899);
ASSERT(dt.GetDay() == 30);
ASSERT(dt.GetMonth() == 12);
ASSERT(dt.GetHour() == 22);
ASSERT(dt.GetMinute() == 15);
ASSERT(dt.GetSecond() == 0);
COleDateTime::SetDateTime
この COleDateTime オブジェクトの日付と時刻を設定します。
int SetDateTime(
int nYear,
int nMonth,
int nDay,
int nHour,
int nMin,
int nSec) throw();
パラメーター
nYear、nMonth、nDay、nHour、nMin、nSec
この COleDateTime オブジェクトにコピーする日付と時刻のコンポーネントを示します。
戻り値
この COleDateTime オブジェクトの値が正常に設定された場合は 0。それ以外の場合は 1。 この戻り値は、DateTimeStatus 列挙型に基づいて行います。 詳細については、SetStatus メンバー関数を参照してください。
解説
パラメーター値の範囲については、次の表を参照してください。
| パラメーター | Bounds |
|---|---|
| nYear | 100 - 9999 |
| nMonth | 1 - 12 |
| nDay | 0 - 31 |
| nHour | 0 - 23 |
| nMin | 0 - 59 |
| nSec | 0 - 59 |
月の日付がオーバーフローした場合は、翌月の正しい日付に変換され、それに応じて月や年がインクリメントされます。 日の値が 0 の場合は、前月の最後の日を示します。 動作は SystemTimeToVariantTime と同じです。
パラメーターで指定した日付または時刻の値が無効である場合、このオブジェクトの状態は無効に設定され、このオブジェクトの値は変更されません。
時刻の値の例を次に示します。
| nHour | nMin | nSec | 値 |
|---|---|---|---|
| 1 | 3 | 3 | 01:03:03 |
| 23 | 45 | 0 | 23:45:00 |
| 25 | 30 | 0 | 無効 |
| 9 | 60 | 0 | 無効 |
日付の値の例を次に示します。
| nYear | nMonth | nDay | 値 |
|---|---|---|---|
| 1995 | 4 | 15 | 15 April 1995 |
| 1789 | 7 | 14 | 17 July 1789 |
| 1925 | 2 | 30 | 無効 |
| 10000 | 1 | 1 | 無効 |
日付のみを設定するには、COleDateTime::SetDate を参照してください。 時刻のみを設定するには、COleDateTime::SetTime を参照してください。
この COleDateTime オブジェクトの値を照会するメンバー関数の詳細については、次のメンバー関数を参照してください。
COleDateTime 値の限界の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
例
GetStatus の例を参照してください。
COleDateTime::SetStatus
この COleDateTime オブジェクトの状態を設定します。
void SetStatus(DateTimeStatus status) throw();
パラメーター
status
この COleDateTime オブジェクトの新しい状態値。
解説
status パラメーターの値は、COleDateTime クラス内で定義されている DateTimeStatus 列挙型によって定義されています。 詳細については、COleDateTime::GetStatus を参照してください。
注意事項
この関数は、高度なプログラミング状況のためのものです。 この関数では、このオブジェクト内のデータは変更されません。 通常は、状態を null または無効に設定するために使用されます。 代入演算子 (演算子 =) と SetDateTime では、ソースの値に基づいてオブジェクトの状態が設定されます。
例
GetStatus の例を参照してください。
COleDateTime::SetTime
この COleDateTime オブジェクトの時刻を設定します。
int SetTime(
int nHour,
int nMin,
int nSec) throw();
パラメーター
nHour、nMin、nSec
この COleDateTime オブジェクトにコピーする時刻のコンポーネントを示します。
戻り値
この COleDateTime オブジェクトの値が正常に設定された場合は 0。それ以外の場合は 1。 この戻り値は、DateTimeStatus 列挙型に基づいて行います。 詳細については、SetStatus メンバー関数を参照してください。
解説
時刻は、指定した値に設定されます。 日付は、0 つまり 1899 年 12 月 30 日に設定されます。
パラメーター値の範囲については、次の表を参照してください。
| パラメーター | Bounds |
|---|---|
| nHour | 0 - 23 |
| nMin | 0 - 59 |
| nSec | 0 - 59 |
パラメーターで指定した時刻の値が無効である場合、このオブジェクトの状態は無効に設定され、このオブジェクトの値は変更されません。
時刻の値の例を次に示します。
| nHour | nMin | nSec | 値 |
|---|---|---|---|
| 1 | 3 | 3 | 01:03:03 |
| 23 | 45 | 0 | 23:45:00 |
| 25 | 30 | 0 | 無効 |
| 9 | 60 | 0 | 無効 |
日付と時刻の両方を設定するには、COleDateTime::SetDateTime を参照してください。
この COleDateTime オブジェクトの値を照会するメンバー関数の詳細については、次のメンバー関数を参照してください。
COleDateTime 値の限界の詳細については、記事「日付と時刻: Automation のサポート」を参照してください。
例
SetDate の例を参照してください。