CTime クラス

絶対日時を表します。

構文

class CTime

メンバー

パブリック コンストラクター

名前 説明
CTime::CTime さまざまな方法で CTime オブジェクトを作成します。

パブリック メソッド

名前 説明
CTime::Format ローカル タイム ゾーンに基づいて、CTime オブジェクトを書式設定済みの文字列に変換します。
CTime::FormatGmt UTC に基づいて、CTime オブジェクトを書式設定済みの文字列に変換します。
CTime::GetAsDBTIMESTAMP CTime オブジェクトに格納されている時刻情報を Win32 互換の DBTIMESTAMP 構造体に変換します。
CTime::GetAsSystemTime CTime オブジェクトに格納されている時刻情報を Win32 互換の SYSTEMTIME 構造体に変換します。
CTime::GetCurrentTime 現在の時刻を表す CTime オブジェクトを作成します (静的メンバー関数)。
CTime::GetDay CTime オブジェクトによって表される日を返します。
CTime::GetDayOfWeek CTime オブジェクトによって表される曜日を返します。
CTime::GetGmtTm UTC に基づいて、CTime オブジェクトをコンポーネントに分割します。
CTime::GetHour CTime オブジェクトによって表される時間を返します。
CTime::GetLocalTm ローカル タイム ゾーンに基づいて、CTime オブジェクトをコンポーネントに分割します。
CTime::GetMinute CTime オブジェクトによって表される分を返します。
CTime::GetMonth CTime オブジェクトによって表される月を返します。
CTime::GetSecond CTime オブジェクトによって表される秒を返します。
CTime::GetTime 特定の CTime オブジェクトの __time64_t 値を返します。
CTime::GetYear CTime オブジェクトによって表される年を返します。
CTime::Serialize64 アーカイブとの間でデータをシリアル化します。

演算子

名前 説明
演算子 + - これらの演算子では、CTimeSpan オブジェクトと CTime オブジェクトの間で加算および減算を行います。
operator +=、-= これらの演算子では、この CTime オブジェクトからの CTimeSpan オブジェクトの減算や、それらの加算を行います。
operator = 代入演算子。
演算子 ==、< など 比較演算子。

解説

CTime には基底クラスはありません。

CTime 値は協定世界時 (UTC) に基づいています。これは協定世界時 (グリニッジ標準時、GMT) に相当します。 タイム ゾーンの決定方法については、「時刻の管理」を参照してください。

CTime オブジェクトを作成するときに、標準時が有効であることを示すには、nDST パラメーターを 0 に設定します。夏時間が有効であることを示すには、0 より大きい値に設定します。C ランタイム ライブラリ コードによって標準時と夏時間のどちらが有効であるかが計算されるようにするには、0 未満の値に設定します。 tm_isdst は必須フィールドです。 設定しないと、その値は未定義になり、mktime からの戻り値は予測できません。 timeptr が、asctime_s_gmtime_s、または localtime_s への前回の呼び出しで返された tm 構造体を指す場合、tm_isdst フィールドには正しい値が含まれています。

コンパニオン クラス CTimeSpan は、時間間隔を表します。

CTimeCTimeSpan のクラスは、派生するようには設計されていません。 仮想関数はないので、CTime オブジェクトと CTimeSpan オブジェクトのサイズは正確に 8 バイトです。 ほとんどのメンバー関数はインラインです。

Note

日付の上限は 12/31/3000 です。 下限は 1/1/1970 12:00:00 AM GMT です。

CTime の使用の詳細については、ランタイム ライブラリ リファレンスの記事「日付と時刻」および「時刻の管理」を参照してください。

Note

CTime 構造体は MFC 7.1 から MFC 8.0 に変更されました。 MFC 8.0 以降のバージョンの演算子 << を使用して CTime 構造体をシリアル化した場合、結果として得られるファイルは以前のバージョンの MFC では読み取りできません。

必要条件

ヘッダー: atltime.h

CTime 比較演算子

比較演算子。

bool operator==(CTime time) const throw();
bool operator!=(CTime time) const throw();
bool operator<(CTime time) const throw();
bool operator>(CTime time) const throw();
bool operator<=(CTime time) const throw();
bool operator>=(CTime time) const throw();

パラメーター

time
比較される CTime オブジェクト。

戻り値

これらの演算子では 2 つの絶対時間を比較し、条件が true の場合は TRUE を返します。それ以外の場合は FALSE を返します。

CTime t1 = CTime::GetCurrentTime();
CTime t2 = t1 + CTimeSpan(0, 1, 0, 0);    // 1 hour later
ATLASSERT(t1 != t2);
ATLASSERT(t1 < t2);
ATLASSERT(t1 <= t2);   

CTime::CTime

指定した時刻で初期化された新しい CTime オブジェクトを作成します。

CTime() throw();
CTime(__time64_t time) throw();
CTime(int nYear, int nMonth, int nDay,
      int nHour, int nMin, int nSec, int nDST = -1);
CTime(WORD wDosDate, WORD wDosTime, int nDST = -1);
CTime(const SYSTEMTIME& st, int nDST = - 1) throw();
CTime(const FILETIME& ft, int nDST = - 1);
CTime(const DBTIMESTAMP& dbts, int nDST = -1) throw();

パラメーター

timeSrc
既に存在する CTime オブジェクトを示します。

time
__time64_t 時刻値。これは、1970 年 1 月 1 日 (UTC) からの秒数です。 これは現地時刻に合わせて調整されます。 たとえば、ニューヨークにいて、パラメーター 0 を渡して CTime オブジェクトを作成した場合、CTime::GetMonth は 12 を返します。

nYearnMonthnDaynHournMinnSec
新しい CTime オブジェクトにコピーする日付と時刻の値を示します。

nDST
夏時間が有効であるかどうかを示します。 次の 3 つの値のいずれかになります。

  • nDST が 0 に設定されている場合は、標準時が有効です。

  • nDST が 0 より大きい値に設定されている場合は、夏時間が有効です。

  • nDST が 0 より小さい値 (既定値) に設定されている場合は、 標準時と夏時間のどちらが有効であるかが自動的に計算されます。

wDosDatewDosTime
日付と時刻の値に変換されて新しい CTime オブジェクトにコピーされる MS-DOS の日付と時刻の値。

st
日付と時刻の値に変換されて新しい CTime オブジェクトにコピーされる SYSTEMTIME 構造体。

ft
日付と時刻の値に変換されて新しい CTime オブジェクトにコピーされる FILETIME 構造体。

dbts
現在の現地時刻が含まれる DBTIMESTAMP 構造体への参照。

解説

次に、各コンストラクターについて説明します。

  • CTime(); 初期化されていない CTime オブジェクトを作成します。 このコンストラクターを使用すると、CTime オブジェクト配列を定義できます。 このような配列を有効な時間で初期化してから使用する必要があります。

  • CTime( const CTime& );CTime 値から CTime オブジェクトを作成します。

  • CTime( __time64_t );__time64_t 型から CTime オブジェクトを作成します。 このコンストラクターでは、UTC 時刻が想定されており、結果を現地時刻に変換してから格納します。

  • CTime( int, int, ...); 各コンポーネントを次の範囲に制限して、現地時刻コンポーネントから CTime オブジェクトを作成します。

    コンポーネント Range
    nYear 1970-3000
    nMonth 1-12
    nDay 1-31
    nHour 0-23
    nMin 0-59
    nSec 0-59

    このコンストラクターでは、UTC への適切な変換を行います。 1 つ以上の時間コンポーネントが範囲外である場合、デバッグ バージョンの Microsoft Foundation Class ライブラリによってアサートされます。 呼び出す前に引数を検証する必要があります。 このコンストラクターでは、現地時刻が想定されています。

  • CTime( WORD, WORD ); 指定した MS-DOS の日付と時刻の値から CTime オブジェクトを作成します。 このコンストラクターでは、現地時刻が想定されています。

  • CTime( const SYSTEMTIME& );SYSTEMTIME 構造体から CTime オブジェクトを作成します。 このコンストラクターでは、現地時刻が想定されています。

  • CTime( const FILETIME& );FILETIME 構造体から CTime オブジェクトを作成します。 CTime FILETIME の初期化を直接使用する可能性はほとんどありません。 ファイルの操作に CFile オブジェクトを使用する場合は、CFile::GetStatus により、FILETIME 構造体で初期化された CTime オブジェクトを介してファイルのタイム スタンプが取得されます。 このコンストラクターでは、UTC に基づく時刻が想定されており、結果を格納する前に値を現地時刻に自動的に変換します。

    Note

    DBTIMESTAMP パラメーターを使用するコンストラクターは、OLEDB.h がインクルードされている場合にのみ使用できます。

詳細については、Windows SDK の SYSTEMTIME 構造体と FILETIME 構造体に関するページを参照してください。 また、Windows SDK の「MS-DOS の日付と時刻」のエントリも参照してください。

time_t osBinaryTime;  // C run-time time (defined in <time.h>)
time(&osBinaryTime) ;  // Get the current time from the 
                         // operating system.
CTime time1; // Empty CTime. (0 is illegal time value.)
CTime time2 = time1; // Copy constructor.
CTime time3(osBinaryTime);  // CTime from C run-time time
CTime time4(1999, 3, 19, 22, 15, 0); // 10:15PM March 19, 1999   

CTime::Format

このメンバー関数を呼び出して、日時値の書式設定済みの表現を作成します。

CString Format(LPCTSTR pszFormat) const;
CString Format(UINT nFormatID) const;

パラメーター

pszFormat
printf の書式設定文字列に似た書式設定文字列。 前にパーセント (%) 記号の付いた書式設定コードは、対応する CTime コンポーネントに置き換えられます。 書式設定文字列内の他の文字は、返される文字列にそのままコピーされます。 書式設定コードの一覧については、strftime ランタイム関数に関するページを参照してください。

nFormatID
この書式を識別する文字列の ID。

戻り値

書式設定済みの時刻を含む CString

解説

この CTime オブジェクトの状態が null の場合、戻り値は空の文字列になります。

このメソッドは、書式設定する日時値が 1970 年 1 月 1 日午前 0 時から 3000 年 12 月 31 日 (協定世界時 (UTC)) の範囲ではない場合に例外をスローします。

CTime t(1999, 3, 19, 22, 15, 0); 
// 10:15 PM March 19, 1999
CString s = t.Format(_T("%A, %B %d, %Y"));
ATLASSERT(s == _T("Friday, March 19, 1999"));   

CTime::FormatGmt

この CTime オブジェクトに対応する書式設定済みの文字列を生成します。

CString FormatGmt(LPCTSTR pszFormat) const;
CString FormatGmt(UINT nFormatID) const;

パラメーター

pszFormat
printf の書式設定文字列に類似した書式設定文字列を指定します。 詳細については、strftime ランタイム関数に関するページを参照してください。

nFormatID
この書式を識別する文字列の ID。

戻り値

書式設定済みの時刻を含む CString

解説

時刻値は変換されないので、UTC を反映します。

このメソッドは、書式設定する日時値が 1970 年 1 月 1 日午前 0 時から 3000 年 12 月 31 日 (協定世界時 (UTC)) の範囲ではない場合に例外をスローします。

CTime::Format の例を参照してください。

CTime::GetAsDBTIMESTAMP

このメンバー関数を呼び出して、CTime オブジェクトに格納されている時刻情報を Win32 互換の DBTIMESTAMP 構造体に変換します。

bool GetAsDBTIMESTAMP(DBTIMESTAMP& dbts) const throw();

パラメーター

dbts
現在の現地時刻が含まれる DBTIMESTAMP 構造体への参照。

戻り値

正常終了した場合は 0 以外を返します。それ以外の場合は 0 を返します。

解説

結果として得られる時刻を、参照されている dbts 構造体に格納します。 この関数によって初期化された DBTIMESTAMP データ構造体の fraction メンバーは、0 に設定されます。

CTime t = CTime::GetCurrentTime();
DBTIMESTAMP ts;
t.GetAsDBTIMESTAMP(ts); // Retrieves the time in t into the ts structure

CTime::GetAsSystemTime

このメンバー関数を呼び出して、CTime オブジェクトに格納されている時刻情報を Win32 互換の SYSTEMTIME 構造体に変換します。

bool GetAsSystemTime(SYSTEMTIME& st) const throw();

パラメーター

timeDest
CTime オブジェクトから変換された日時値を保持する SYSTEMTIME 構造体への参照。

戻り値

成功した場合は TRUE、それ以外の場合は FALSE。

解説

GetAsSystemTime では、参照されている timeDest 構造体に結果の日時を格納します。 この関数によって初期化された SYSTEMTIME データ構造体の wMilliseconds メンバーは、0 に設定されます。

// Convert CTime to FILETIME
CTime time(CTime::GetCurrentTime());
SYSTEMTIME timeDest;
time.GetAsSystemTime(timeDest);
FILETIME fileTime;
::SystemTimeToFileTime(&timeDest, &fileTime);   

CTime::GetCurrentTime

現在時刻を表す CTime オブジェクトを返します。

static CTime WINAPI GetCurrentTime() throw();

解説

現在のシステムの日付と時刻を協定世界時 (UTC) で返します。

CTime t = CTime::GetCurrentTime();   

CTime::GetDay

CTime オブジェクトによって表される日を返します。

int GetDay() const throw();

戻り値

現地時刻に基づいて、1 から 31 の範囲の日付を返します。

解説

この関数は、静的に割り当てられた内部バッファーを使用する GetLocalTm を呼び出します。 このバッファー内のデータは、他の CTime メンバー関数の呼び出しのために上書きされます。

// Example for CTime::GetDay, CTime::GetMonth, and CTime::GetYear
CTime t(1999, 3, 19, 22, 15, 0); // 10:15 PM March 19, 1999
ATLASSERT(t.GetDay() == 19);
ATLASSERT(t.GetMonth() == 3);
ATLASSERT(t.GetYear() == 1999);

CTime::GetDayOfWeek

CTime オブジェクトによって表される曜日を返します。

int GetDayOfWeek() const throw();

戻り値

現地時刻に基づいて、曜日 (1 = 日曜日、2 = 月曜日、7 = 土曜日) を返します。

解説

この関数は、静的に割り当てられた内部バッファーを使用する GetLocalTm を呼び出します。 このバッファー内のデータは、他の CTime メンバー関数の呼び出しのために上書きされます。

// Print out the day of the week using localized day name
UINT DayOfWeek[] = {
   LOCALE_SDAYNAME7,   // Sunday
   LOCALE_SDAYNAME1,   
   LOCALE_SDAYNAME2,
   LOCALE_SDAYNAME3,
   LOCALE_SDAYNAME4, 
   LOCALE_SDAYNAME5, 
   LOCALE_SDAYNAME6   // Saturday
};
TCHAR strWeekday[256];
CTime time(CTime::GetCurrentTime());   // Initialize CTime with current time
::GetLocaleInfo(LOCALE_USER_DEFAULT,   // Get string for day of the week from system
   DayOfWeek[time.GetDayOfWeek()-1],   // Get day of week from CTime
   strWeekday, sizeof(strWeekday) / sizeof(strWeekday[0]));
ATLTRACE(_T("%s\n"), strWeekday);               // Print out day of the week   

CTime::GetGmtTm

この CTime オブジェクトに含まれている時刻の分解を含む構造体 tm を取得します。

struct tm* GetGmtTm(struct tm* ptm) const;

パラメーター

ptm
時刻データを受信するバッファーを指します。 このポインターが NULL の場合、例外がスローされます。

戻り値

インクルード ファイル TIME.H で定義されている、入力された構造体 tm へのポインター。 構造体のレイアウトについては、「gmtime、_gmtime32、_gmtime64」を参照してください。

解説

GetGmtTm は UTC を返します。

ptm を NULL にすることはできません。 以前の動作 (ptm に NULL を指定して、静的に割り当てられた内部バッファーを使用することを示すことができる) に戻す場合は、_SECURE_ATL の定義を解除します。

// Compute difference between local time and GMT
CTime time(CTime::GetCurrentTime());
tm t1, t2;
time.GetLocalTm(&t1);
time.GetGmtTm(&t2);

ATLTRACE(_T("Difference between local time and GMT is %d hours.\n"), 
   t1.tm_hour - t2.tm_hour);   

CTime::GetHour

CTime オブジェクトによって表される時間を返します。

int GetHour() const throw();

戻り値

現地時刻に基づいて、0 から 23 の範囲の時間を返します。

解説

この関数は、静的に割り当てられた内部バッファーを使用する GetLocalTm を呼び出します。 このバッファー内のデータは、他の CTime メンバー関数の呼び出しのために上書きされます。

// Example for CTime::GetHour, CTime::GetMinute, and CTime::GetSecond
CTime t(1999, 3, 19, 22, 15, 0); // 10:15 PM March 19, 1999
ATLASSERT(t.GetSecond() == 0);
ATLASSERT(t.GetMinute() == 15);
ATLASSERT(t.GetHour() == 22);   

CTime::GetLocalTm

この CTime オブジェクトに含まれている時刻の分解を含む構造体 tm を取得します。

struct tm* GetLocalTm(struct tm* ptm) const;

パラメーター

ptm
時刻データを受信するバッファーを指します。 このポインターが NULL の場合、例外がスローされます。

戻り値

インクルード ファイル TIME.H で定義されている、入力された構造体 tm へのポインター。 構造体のレイアウトについては、「gmtime、_gmtime32、_gmtime64」を参照してください。

解説

GetLocalTm は現地時刻を返します。

ptm を NULL にすることはできません。 以前の動作 (ptm に NULL を指定して、静的に割り当てられた内部バッファーを使用することを示すことができる) に戻す場合は、_SECURE_ATL の定義を解除します。

CTime t(1999, 3, 19, 22, 15, 0); // 10:15PM March 19, 1999
tm osTime;  // A structure containing time elements.
t.GetLocalTm(&osTime);
ATLASSERT(osTime.tm_mon == 2); // Note zero-based month!   

CTime::GetMinute

CTime オブジェクトによって表される分を返します。

int GetMinute() const throw();

戻り値

現地時刻に基づいて、0 から 59 の範囲の分を返します。

解説

この関数は、静的に割り当てられた内部バッファーを使用する GetLocalTm を呼び出します。 このバッファー内のデータは、他の CTime メンバー関数の呼び出しのために上書きされます。

GetHour の例を参照してください。

CTime::GetMonth

CTime オブジェクトによって表される月を返します。

int GetMonth() const throw();

戻り値

現地時刻に基づいて、1 から 12 の範囲の月 (1 = 1 月) を返します。

解説

この関数は、静的に割り当てられた内部バッファーを使用する GetLocalTm を呼び出します。 このバッファー内のデータは、他の CTime メンバー関数の呼び出しのために上書きされます。

GetDay の例を参照してください。

CTime::GetSecond

CTime オブジェクトによって表される秒を返します。

int GetSecond() const throw();

戻り値

現地時刻に基づいて、0 から 59 の範囲の秒を返します。

解説

この関数は、静的に割り当てられた内部バッファーを使用する GetLocalTm を呼び出します。 このバッファー内のデータは、他の CTime メンバー関数の呼び出しのために上書きされます。

GetHour の例を参照してください。

CTime::GetTime

特定の CTime オブジェクトの __time64_t 値を返します。

__time64_t GetTime() const throw();

戻り値

GetTime は、1970 年 1 月 1 日から現在の CTime オブジェクトまでの秒数を返します。

CTime t(2005, 10, 20, 23, 50, 0); // 11:50 PM October 20, 2005
time_t osBinaryTime = t.GetTime();  // time_t defined in <time.h>

_tprintf_s(_T("time_t = %ld\n"), osBinaryTime);

CTime::GetYear

CTime オブジェクトによって表される年を返します。

int GetYear();

戻り値

現地時刻に基づいて、1970 年 1 月 1 日から 2038 年 1 月 18 日 (包括的) の範囲の年を返します。

解説

この関数は、静的に割り当てられた内部バッファーを使用する GetLocalTm を呼び出します。 このバッファー内のデータは、他の CTime メンバー関数の呼び出しのために上書きされます。

GetDay の例を参照してください。

CTime::operator =

代入演算子。

CTime& operator=(__time64_t time) throw();

パラメーター

time
新しい日付と時刻の値。

戻り値

更新後の CTime オブジェクト。

解説

このオーバーロードされた代入演算子では、ソース時間をこの CTime オブジェクトにコピーします。 CTime オブジェクトの内部時刻記憶は、タイム ゾーンに依存しません。 代入時に、タイム ゾーンの変換は必要ありません。

CTime::operator +, -

これらの演算子では、CTimeSpan オブジェクトと CTime オブジェクトの間で加算および減算を行います。

CTime operator+(CTimeSpan timeSpan) const throw();
CTime operator-(CTimeSpan timeSpan) const throw();
CTimeSpan operator-(CTime time) const throw();

パラメーター

timeSpan
加算または減算される CTimeSpan オブジェクト。

time
減算される CTime オブジェクト。

戻り値

操作の結果を表す CTime または CTimeSpan オブジェクト。

解説

CTime オブジェクトは絶対時間を表し、CTimeSpan オブジェクトは相対時間を表します。 最初の 2 つの演算子を使用すると、CTime オブジェクトからの CTimeSpan オブジェクトの減算や、それらの加算を行うことができます。 3 番目の演算子を使用すると、ある CTime オブジェクトを別の値から減算して、CTimeSpan オブジェクトを生成することができます。

CTime t1(1999, 3, 19, 22, 15, 0); // 10:15 PM March 19, 1999
CTime t2(1999, 3, 20, 22, 15, 0); // 10:15 PM March 20, 1999
CTimeSpan ts = t2 - t1;             // Subtract 2 CTimes
ATLASSERT(ts.GetTotalSeconds() == 86400L);
ATLASSERT((t1 + ts) == t2);       // Add a CTimeSpan to a CTime.
ATLASSERT((t2 - ts) == t1);       // Subtract a CTimeSpan from a CTime.   

CTime::operator +=、-=

これらの演算子では、この CTime オブジェクトからの CTimeSpan オブジェクトの減算や、それらの加算を行います。

CTime& operator+=(CTimeSpan span) throw();
CTime& operator-=(CTimeSpan span) throw();

パラメーター

span
加算または減算される CTimeSpan オブジェクト。

戻り値

更新後の CTime オブジェクト。

解説

これらの演算子を使用すると、この CTime オブジェクトからの CTimeSpan オブジェクトの減算や、それらの加算を行うことができます。

CTime t(1999, 3, 19, 22, 15, 0); // 10:15 PM March 19, 1999
t += CTimeSpan(0, 1, 0, 0);      // 1 hour exactly
ATLASSERT(t.GetHour() == 23);   

CTime::Serialize64

Note

このメソッドは、MFC プロジェクトでのみ使用できます。

アーカイブとの間で、メンバー変数に関連付けられたデータをシリアル化します。

CArchive& Serialize64(CArchive& ar);

パラメーター

ar
更新する CArchive オブジェクト。

戻り値

更新後の CArchive オブジェクト。

関連項目

asctime_s、_wasctime_s
_ftime_s、_ftime32_s、_ftime64_s
gmtime_s、_gmtime32_s、_gmtime64_s
localtime_s、_localtime32_s、_localtime64_s
strftime、wcsftime、_strftime_l、_wcsftime_l
time、_time32、_time64
CTimeSpan クラス
階層図
ATL/MFC 共有クラス