Sdílet prostřednictvím


Datum a čas: podpora automatizace

Tento článek popisuje, jak využít služeb knihovny třídy týkající se správy datum a čas.Popsané postupy zahrnují:

COleDateTime třída poskytuje způsob reprezentace data a času.Poskytuje podrobnější a větší rozsah než CTime třídy.COleDateTimeSpan třída představuje uplynulý čas jako rozdíl mezi dvěma COleDateTime objektů.

COleDateTime a COleDateTimeSpan třídy jsou navrženy pro použití se COleVariant třídy v automatizaci.COleDateTimea COleDateTimeSpan jsou také užitečné při programování databází MFC, ale může být použit kdykoli chcete manipulovat hodnoty data a času.Přestože COleDateTime třída má větší rozsah hodnot a jemnější rozlišení, než CTime třídy, vyžaduje další úložiště objektu než CTime .Existují také některé zvláštní aspekty při práci se základní den typu.Viz typu datum další podrobnosti o provádění den.

COleDateTimeobjekty lze znázornit data mezi 1. ledna 100 a 31. prosince 9999.COleDateTimeobjekty jsou plovoucí hodnoty bodů s rozlišením 1 milisekundu přibližné.COleDateTimeje založen datum typ dat definované v dokumentaci MFC pod COleDateTime::operator datum.Skutečné použití data přesahuje tyto hranice. COleDateTime Provádění ukládá tyto hranice usnadňující práci s třídou.

COleDateTimeJuliánská data nepodporuje.Předpokládá se, že gregoriánský kalendář rozšířit zpět v čase do 1. ledna 100.

COleDateTimeignoruje letní čas (DST).Následující příklad kódu porovnává dvě metody výpočtu časový interval, který protíná osu data přepnutí DST: jeden pomocí CRT a další pomocí COleDateTime .DST přepínači, ve většině v druhý týden v dubnu a třetí v říjnu.

První metoda nastaví dvě CTime objekty, čas1 a time2, duben 5 a 6. dubna, pomocí standardního typu c struktury tm a time_t .Zobrazí kód čas1 a time2 a časové rozpětí mezi nimi.

Druhá metoda vytvoří dvě COleDateTime objekty, oletime1 a oletime2 a nastaví jim stejná data jako čas1 a time2.Zobrazí oletime1 a oletime2 a časové rozpětí mezi nimi.

CRT správně vypočte rozdíl v 23 hodin.COleDateTimeSpanvypočítá rozdíl 24 hodin.

Všimněte si, že řešení se používá ke konci příkladu zobrazí datum správně pomocí COleDateTime::Format .Naleznete v článku znalostní báze Knowledge Base "Chyba: selhání Format("%D") pro COleDateTime a COleDateTimeSpan " (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);
}

Viz také

Koncepty

Datum a čas