Datum und Uhrzeit
MFC unterstützt verschiedene Arbeitsweisen mit Datums- und Uhrzeitangaben:
Unterstützung für den Automatisierungsdatentyp
DATE
.DATE
unterstützt Datums-, Uhrzeit- und Datums-/Uhrzeitwerte. Diese Funktionalität wird von denCOleDateTime
Klassen undCOleDateTimeSpan
den Klassen gekapselt. Sie arbeiten mit der Klasse mithilfe derCOleVariant
Automatisierungsunterstützung zusammen.Allgemeine Zeitklassen. Die
CTime
klassenCTimeSpan
kapseln den größten Teil der Funktionalität, die der ANSI-Standardzeitbibliothek zugeordnet ist, die in deklarierttime.h
wird.Unterstützung für systemuhr. Mit MFC Version 3.0 wurde Unterstützung für die Win32
SYSTEMTIME
- undFILETIME
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 oletime2
legt 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
Erstellen eines
COleDateTime
-ObjektsRufen 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
Erstellen Sie zwei
COleDateTime
Objekte.Legen Sie eines der
COleDateTime
Objekte auf die aktuelle Uhrzeit fest.Führen Sie einige zeitaufwendige Aufgaben aus.
Legen Sie das andere
COleDateTime
Objekt auf die aktuelle Uhrzeit fest.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 COleVariant
abgeleitet. 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
.