Partage via


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. Les COleDateTime classes et COleDateTimeSpan encapsulent cette fonctionnalité. Ils travaillent avec la classe à l’aide de la COleVariant prise en charge d’Automation.

  • Classes de temps à usage général. Les CTime classes encapsulent CTimeSpan la plupart des fonctionnalités associées à la bibliothèque de temps ANSI standard, qui est déclarée dans time.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 et FILETIME 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 COleDateTimede .

La première méthode définit deux CTime objets et time1time2, 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 oletime1oletime2les 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

  1. Créez un objet COleDateTime.

  2. 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é

  1. Créez deux COleDateTime objets.

  2. Définissez l’un des COleDateTime objets sur l’heure actuelle.

  3. Effectuez une tâche fastidieuse.

  4. Définissez l’autre COleDateTime objet sur l’heure actuelle.

  5. 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.

Voir aussi

Concepts
Rubriques MFC générales