Datum und Uhrzeit

MFC unterstützt verschiedene Arbeitsweisen mit Datums- und Uhrzeitangaben:

  • Unterstützung für den AutomatisierungsdatentypDATE. DATE unterstützt Datums-, Uhrzeit- und Datums-/Uhrzeitwerte. Diese Funktionalität wird von den COleDateTime Klassen und COleDateTimeSpan den Klassen gekapselt. Sie arbeiten mit der Klasse mithilfe der COleVariant Automatisierungsunterstützung zusammen.

  • Allgemeine Zeitklassen. Die CTime klassen CTimeSpan kapseln den größten Teil der Funktionalität, die der ANSI-Standardzeitbibliothek zugeordnet ist, die in deklariert time.hwird.

  • Unterstützung für systemuhr. Mit MFC Version 3.0 wurde Unterstützung für die Win32SYSTEMTIME- und FILETIME Datentypen hinzugefügtCTime.

Datum und Uhrzeit: Automatisierungsunterstützung

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

Die COleDateTime Klassen und COleDateTimeSpan Klassen sind für die Verwendung mit der COleVariant Klasse vorgesehen. COleDateTime und COleDateTimeSpan sind auch bei der MFC-Datenbankprogrammierung nützlich, können aber immer verwendet werden, wenn Sie Datums- und Uhrzeitwerte bearbeiten möchten. Obwohl die COleDateTime Klasse einen größeren Wertebereich und eine höhere Granularität als die CTime Klasse aufweist, ist mehr Speicher pro Objekt erforderlich als CTime. Es gibt auch einige besondere Überlegungen beim Arbeiten mit dem zugrunde liegenden DATE-Typ. Weitere Informationen zur Implementierung von DATE" finden Sie unter "Typ DATE ".

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

COleDateTime julianische Datumsangaben werden nicht unterstützt. Der gregorianische Kalender wird angenommen, dass er bis zum 1. Januar 100 zurückreichen wird.

COleDateTime ignoriert Sommerzeit (DST). Im folgenden Codebeispiel werden zwei Methoden zum Berechnen einer Zeitspanne verglichen, die das DST-Switchoverdatum überschreitet: eine mit dem CRT und die andere.COleDateTime

Die erste Methode legt zwei CTime Objekte time1 und , bzw time2. den 5. April bzw. den 6. April unter Verwendung der C-Standardstrukturen tm und time_t. Der Code zeigt und time2 die Zeitspanne zwischen ihnen antime1.

Die zweite Methode erstellt zwei COleDateTime Objekte oletime1 und oletime2legt sie auf dasselbe Datum wie time1 und time2. Sie zeigt und oletime2 die Zeitspanne zwischen ihnen anoletime1.

Das CRT berechnet eine Differenz von 23 Stunden richtig. COleDateTimeSpan berechnet eine Differenz von 24 Stunden.

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);
}

Fragt die aktuelle Zeit ab

Das folgende Verfahren zeigt, wie Sie ein COleDateTime Objekt erstellen und mit der aktuellen Uhrzeit initialisieren.

So rufen Sie die aktuelle Uhrzeit ab

  1. Erstellen eines COleDateTime-Objekts

  2. Rufen Sie GetCurrentTime auf.

    COleDateTime timeNow;
    timeNow = COleDateTime::GetCurrentTime();   
    

Berechnen der verstrichenen Zeit

Dieses Verfahren zeigt, wie Sie den Unterschied zwischen zwei COleDateTime Objekten berechnen und ein COleDateTimeSpan Ergebnis erhalten.

So berechnen Sie verstrichene Zeit

  1. Erstellen Sie zwei COleDateTime Objekte.

  2. Legen Sie eines der COleDateTime Objekte auf die aktuelle Uhrzeit fest.

  3. Führen Sie einige zeitaufwendige Aufgaben aus.

  4. Legen Sie das andere COleDateTime Objekt auf die aktuelle Uhrzeit fest.

  5. Nehmen Sie den Unterschied zwischen den beiden Zeiten.

    COleDateTime timeStart, timeEnd;
    timeStart = COleDateTime::GetCurrentTime();
    // ... perform time-consuming task
    timeEnd = COleDateTime::GetCurrentTime();
    COleDateTimeSpan spanElapsed = timeEnd - timeStart;   
    

Formatieren einer Uhrzeit

So formatieren Sie eine Uhrzeit

Verwenden Sie die Format Memberfunktion oder COleDateTime COleDateTimeSpan erstellen Sie eine Zeichenfolge, die die Uhrzeit oder verstrichene Zeit darstellt.

COleDateTime time(1970, 12, 18, 17, 30, 0);
// 18 December 1970, 5:30 PM
CString s = time.Format(VAR_DATEVALUEONLY);
// s contains the date formatted based on 
// the current national language specifications
// (locale ID). The time portion is ignored for 
// formatting purposes in this case.   

Weitere Informationen finden Sie unter COleVariant-Klasse.

Datum und Uhrzeit: Datenbankunterstützung

Ab Version 4.0 verwendet die MFC-Datenbankprogrammierung die COleDateTime Und-Klassen COleDateTimeSpan , um Datums- und Uhrzeitdaten darzustellen. Diese Klassen, die auch in der Automatisierung verwendet werden, werden von der Klasse COleVariantabgeleitet. Sie bieten eine bessere Unterstützung für die Verwaltung von Datums- und Uhrzeitdaten als dies CTime und CTimeSpan.

Datum und Uhrzeit: SYSTEMTIME Support

Die COleDateTime Klasse verfügt über Konstruktoren, die System- und Dateizeiten von Win32 akzeptieren.

Die Win32-Struktur FILETIME stellt die Zeit als 64-Bit-Wert dar. Es ist ein komfortableres Format für den internen Speicher als eine SYSTEMTIME Struktur, und das von Win32 verwendete Format, um die Zeit der Dateierstellung darzustellen. Informationen zur SYSTEMTIME Struktur finden Sie unter SYSTEMTIME. Informationen zur FILETIME Struktur finden Sie unter FILETIME.

Siehe auch

Konzepte
Allgemeine MFC-Themen