次の方法で共有


日付と時刻 : オートメーションのサポート

ここでは、現在までに関連するクラス ライブラリと時刻。サービス マネージャーを使用する方法について説明します。説明されている手順は次のとおりです。:

COleDateTime のクラスは、日付と時刻の情報を表す方法を提供します。これは CTime クラスよりも広い範囲と単位を提供します。COleDateTimeSpan のクラスは COleDateTime の 2 種類のオブジェクトの違いなどの経過時間を表します。

COleDateTimeCOleDateTimeSpan のクラスは、オートメーションで使用される COleVariant のクラスで使用するようにデザインされています。COleDateTimeCOleDateTimeSpan は、プログラムする MFC データベースにも便利ですが、日付と時刻の値を操作する場合にも使用できます。COleDateTime のクラスに CTime クラスより細かく値と、次の広い範囲がありますが、CTime、オブジェクトごとの詳細ストレージが必要です。date の基になる型を使用すると、特別な考慮事項があります。dateの実装を 日付の型 の詳細については、" "を参照してください。

COleDateTime のオブジェクトが 31 1 年 1 月 1 日、100、および 9999 日までの日付を表すことができます。月、12COleDateTime のオブジェクトは 1 ミリ秒のおおよその解決の浮動小数点値です。COleDateTimeCOleDateTime::operator の日付の下の MFC ドキュメントで定義されている date のデータ型に基づいています。date の実際の実装はこれらの制限を超えて拡張します。COleDateTime の実装はクラスを使用しやすくするために、これらに制限されています。

COleDateTime はサポートされません。グレゴリオ暦は 100 1 年 12 月 1 日までに時間と見なされます。

COleDateTime (DST) の夏時間を無視します。次のコード例は、DST の遷移の日付を越える時間を計算する 2 とおりの方法を比較します: CRT を使用して 1 次元、COleDateTimeを使用してそのほか。DST スイッチ、4 年 1 月 2 番目の週、月の 10 番目のほとんどのロケールでは。

最初のメソッドは、標準の C の型の構造 tmtime_tを使用して 4 年 1 月 5 日午前 4 年 1 月 6 日に CTime の 2 種類のオブジェクト time1、および time2 を、それぞれ設定します。コードでは、これらの time1time2 と時刻表示されます。

2 番目のメソッドは COleDateTime 2 オブジェクト、oletime1 と oletime2を作成し、同じ日付に time1time2に設定します。その間の oletime1 と oletime2 と時刻表示されます。

CRT が正しく 23 時間の相違点を計算します。COleDateTimeSpan は 24 時間の相違点を計算します。

COleDateTime::Formatを使用して日付を正しく表示するために代替手段は例の最後で使用されていることに注意してください。サポート技術情報の文書が煩わせる「"を参照してください: 形式 (「」%D COleDateTimeCOleDateTimeSpanの場合) 」は失敗します (Q167338)。

void CDTDlg::OnPaint()
{
   CPaintDC dc(this); // device context for painting

   time_t date1_t, date2_t;
   tm date_tm;

   date_tm.tm_hour = 12;
   date_tm.tm_min = 0;
   date_tm.tm_mon = 3;
   date_tm.tm_sec = 0;
   date_tm.tm_wday = 0; //Day of week (0-6; Sunday = 0)
   date_tm.tm_yday = 0;
   date_tm.tm_year = 97;
   date_tm.tm_isdst = -1; //Positive if Daylight Saving Time is in effect;
                         //0 if Daylight Saving Time is not in effect; 
                         //Negative if status of DST is unknown.

   date_tm.tm_mday = 6;
   date2_t = mktime(&date_tm);

   date_tm.tm_mday = 5;
   date_tm.tm_isdst = 0;
   date1_t = mktime(&date_tm);

   CTime time1(date1_t), time2(date2_t);
   CTimeSpan ts = time2 - time1;

   dc.TextOut(0, 0, CString(_T("CTime")));
   dc.TextOut(0, 20, time1.Format(_T("%H:%M:%S %A, %B %d, %Y")));
   dc.TextOut(0, 40, time2.Format(_T("%H:%M:%S %A, %B %d, %Y")));
   dc.TextOut(0, 60, ts.Format(_T("%H:%M:%S and %D days")));


   COleDateTime oletime1(date1_t), oletime2(date2_t);
   COleDateTimeSpan olets = oletime2 - oletime1;

   dc.TextOut(0, 120, CString(_T("COleDateTime")));
   dc.TextOut(0, 140, oletime1.Format(_T("%H:%M:%S %A, %B %d, %Y")));
   dc.TextOut(0, 160, oletime2.Format(_T("%H:%M:%S %A, %B %d, %Y")));

   //Work-around bug in COleDateTime::Format("%D")
   CString str;
   str.Format(_T("%s and %d days"), (LPCTSTR)olets.Format(_T("%H:%M:%S")), 
      olets.GetDays());
   dc.TextOut(0, 180, str);
}

参照

概念

日付と時刻