Freigeben über


Date and Time: Automation Support

In diesem Artikel wird beschrieben, wie die Klassenbibliotheksdienstleistungen nutzt, die bisher verknüpft und Zeitverwaltung. Prozeduren beschriebenes zählen:

Die COleDateTime-Klasse bietet eine Möglichkeit, Datums- und Uhrzeitinformationen darzustellen. Es stellt feinere Granularität und einen größeren Bereich als die CTime-Klasse. Die Klasse stellt COleDateTimeSpan Laufzeit, wie der Unterschied zwischen zwei COleDateTime-Objekten dar.

Die COleDateTime und COleDateTimeSpan-Klassen dienen dazu, mit der COleVariant-Klasse verwendet werden, die in der Automatisierung verwendet wird. COleDateTime und COleDateTimeSpan sind auch in der MFC-Datenbankprogrammierung hilfreich, aber sie können verwendet werden, wenn Sie Datums- und Uhrzeitwerte bearbeiten möchten. Obwohl die COleDateTime-Klasse einen größeren Wertebereich und eine feinere Granularität als die CTime-Klasse hat, erfordert sie mehr Speicherplatz pro Objekt als CTime. Es gibt auch einige besondere Überlegungen beim Arbeiten mit dem zugrunde liegenden DATE-Typ. Siehe Der DATUM Typ für weitere Details auf der Implementierung von DATE.

COleDateTime-Objekte können verwendet werden, um Datumsangaben, 100, 9999 und 31. Dezember zwischen 1. Januar darzustellen. COleDateTime-Objekte sind Gleitkommawerte, mit einer ungefähren Auflösung von 1 Millisekunden. COleDateTime basiert auf dem DATE Datentyp definiert, in der MFC-Dokumentation unter COleDateTime::operator-DATUM. Die tatsächliche Implementierung von DATE erstreckt sich über diesen Grenzen hinaus. Die COleDateTime Implementierung erzwingt diese Grenzen auf, um mit der Klasse zu arbeiten, erleichtern.

COleDateTime unterstützt nicht julianische Datumsangaben. Der gregorianische Kalender wird angenommen, dass die in der Zeit 1. Januar zu erweitern, 100.

COleDateTime ignoriert Sommerzeit (DST). Im folgenden Codebeispiel vergleicht zwei Methoden der Ableitung einer Zeit, die das DST-Umschaltendatum überschreitet: ein mithilfe des CRT und das andere mithilfe COleDateTime. DST-Schalter von, in den meisten Gebietsschemas, in der zweiten Woche im April und im dritten im Oktober.

Die erste Methode werden zwei CTime-Objekte, time1 und time2, um 5. April und 6. April verwenden, mithilfe der standardmäßigen Cstrukturen tm und time_t fest. Der Code zeigt time1 und time2 und die Zeitspanne zwischen ihnen.

Die zweite Methode erstellt zwei COleDateTime-Objekte, oletime1 und oletime2, und legt sie auf die gleichen Daten wie time1 und time2 fest. Sie zeigt oletime1 und oletime2 und die Zeitspanne zwischen ihnen.

Die CRT- berechnet ordnungsgemäß einen Unterschied von 23 Stunden. COleDateTimeSpan berechnet einen Unterschied von 24 Stunden.

Beachten Sie, dass eine Problemumgehung neben dem Ende des Beispiels verwendet wird, um das Datum mit dem COleDateTime::Format ordnungsgemäß angezeigt wird. Weitere Informationen finden Sie im Knowledge Base-Artikel "FEHLER: Format("%D") schlägt für COleDateTime und COleDateTimeSpan fehl" (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);
}

Siehe auch

Konzepte

Date and Time