Date et heure
MFC prend en charge plusieurs façons différentes d’utiliser des dates et des heures :
Prise en charge du type de données Automation.
DATE
DATE
prend en charge les valeurs date, heure et date/heure. LesCOleDateTime
classes etCOleDateTimeSpan
encapsulent cette fonctionnalité. Ils travaillent avec la classe à l’aide de laCOleVariant
prise en charge d’Automation.Classes de temps à usage général. Les
CTime
classes encapsulentCTimeSpan
la plupart des fonctionnalités associées à la bibliothèque de temps ANSI standard, qui est déclarée danstime.h
.Prise en charge de l’horloge système. Avec MFC version 3.0, la prise en charge a été ajoutée aux
CTime
types de données etFILETIME
Win32SYSTEMTIME
.
Date et heure : prise en charge d’Automation
La COleDateTime
classe fournit un moyen de représenter les informations de date et d’heure. Il fournit une granularité plus fine et une plage supérieure à la CTime
classe. La COleDateTimeSpan
classe représente le temps écoulé, comme la différence entre deux COleDateTime
objets.
Les COleDateTime
classes et COleDateTimeSpan
les classes sont conçues pour être utilisées avec la COleVariant
classe. COleDateTime
et COleDateTimeSpan
sont également utiles dans la programmation de base de données MFC, mais elles peuvent être utilisées chaque fois que vous souhaitez manipuler des valeurs de date et d’heure. Bien que la COleDateTime
classe ait une plus grande plage de valeurs et une granularité plus fine que la CTime
classe, elle nécessite plus de stockage par objet que CTime
. Il existe également des considérations particulières lors de l’utilisation du type DATE sous-jacent. Pour plus d’informations sur l’implémentation de DATE
, consultez Le DATE
type.
COleDateTime
les objets peuvent être utilisés pour représenter des dates comprises entre le 1er janvier 100 et le 31 décembre 9999. COleDateTime
les objets sont des valeurs à virgule flottante, avec une résolution approximative de 1 milliseconde. COleDateTime
est basé sur le DATE
type de données, défini dans la documentation MFC sous COleDateTime::operator DATE
. L’implémentation réelle de s’étend au-delà de DATE
ces limites. L’implémentation COleDateTime
impose ces limites pour faciliter l’utilisation de la classe.
COleDateTime
ne prend pas en charge les dates Julian. Le calendrier grégorien est supposé s’étendre à temps jusqu’au 1er janvier 100.
COleDateTime
ignore l’heure d’été (DST). L’exemple de code suivant compare deux méthodes de calcul d’un intervalle de temps qui traverse la date de basculement DST : l’une à l’aide du CRT et l’autre à l’aide COleDateTime
de .
La première méthode définit deux CTime
objets et time1
time2
, respectivement, le 5 avril et le 6 avril, à l’aide des structures tm
de type C standard et time_t
. Le code s’affiche time1
et time2
l’intervalle de temps entre eux.
La deuxième méthode crée deux COleDateTime
objets et oletime1
oletime2
les définit sur les mêmes dates que time1
et time2
. Il affiche oletime1
et oletime2
l’intervalle de temps entre eux.
Le CRT calcule correctement une différence de 23 heures. COleDateTimeSpan
calcule une différence de 24 heures.
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);
}
Obtenir l'heure actuelle
La procédure suivante montre comment créer un COleDateTime
objet et l’initialiser avec l’heure actuelle.
Pour obtenir l’heure actuelle
Créez un objet
COleDateTime
.Appelez
GetCurrentTime
.COleDateTime timeNow; timeNow = COleDateTime::GetCurrentTime();
Calcul du temps écoulé
Cette procédure montre comment calculer la différence entre deux COleDateTime
objets et obtenir un COleDateTimeSpan
résultat.
Pour calculer le temps écoulé
Créez deux
COleDateTime
objets.Définissez l’un des
COleDateTime
objets sur l’heure actuelle.Effectuez une tâche fastidieuse.
Définissez l’autre
COleDateTime
objet sur l’heure actuelle.Prenez la différence entre les deux fois.
COleDateTime timeStart, timeEnd; timeStart = COleDateTime::GetCurrentTime(); // ... perform time-consuming task timeEnd = COleDateTime::GetCurrentTime(); COleDateTimeSpan spanElapsed = timeEnd - timeStart;
Mettre en forme une heure
Pour mettre en forme une heure
Utilisez la Format
fonction membre de l’une ou l’autre COleDateTime
des COleDateTimeSpan
chaînes de caractères représentant le temps ou le temps écoulé.
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.
Pour plus d'informations, consultez la classe COleVariant
.
Date et heure : prise en charge de base de données
À compter de la version 4.0, la programmation de base de données MFC utilise les classes et COleDateTimeSpan
les classes pour représenter les COleDateTime
données de date et d’heure. Ces classes, également utilisées dans Automation, sont dérivées de la classe COleVariant
. Ils fournissent une meilleure prise en charge de la gestion des données de date et d’heure que les CTime
données de date et d’heure CTimeSpan
.
Date et heure : SYSTEMTIME
prise en charge
La COleDateTime
classe a des constructeurs qui acceptent les heures système et de fichier de Win32.
La structure Win32 FILETIME
représente le temps sous forme de valeur 64 bits. Il s’agit d’un format plus pratique pour le stockage interne qu’une SYSTEMTIME
structure et le format utilisé par Win32 pour représenter l’heure de création de fichier. Pour plus d’informations sur la SYSTEMTIME
structure, consultez SYSTEMTIME
. Pour plus d’informations sur la FILETIME
structure, consultez FILETIME
.