Sdílet prostřednictvím


Datum a čas

MFC podporuje několik různých způsobů práce s daty a časy:

  • Podpora datového typu Automation DATE DATE podporuje hodnoty data, času a data a času. Tyto COleDateTime funkce zapouzdřují třídy COleDateTimeSpan . Pracují s COleVariant třídou pomocí podpory Automation.

  • Třídy pro obecné účely. CTimeSpan Třídy CTime zapouzdřují většinu funkcí přidružených ke standardní knihovně času ANSI, která je deklarována v time.h.

  • Podpora systémových hodin. V prostředí MFC verze 3.0 byla přidána CTime podpora pro win32 SYSTEMTIME a FILETIME datové typy.

Datum a čas: Podpora automatizace

Třída COleDateTime poskytuje způsob, jak znázorňovat informace o datu a čase. Poskytuje jemněji členitost a větší rozsah než CTime třída. Třída COleDateTimeSpan představuje uplynulý čas, například rozdíl mezi dvěma COleDateTime objekty.

Třídy COleDateTime a COleDateTimeSpan třídy jsou určeny pro použití s COleVariant třídou. COleDateTime a COleDateTimeSpan jsou také užitečné v programování databáze MFC, ale lze je použít vždy, když chcete manipulovat s hodnotami data a času. COleDateTime Ačkoli třída má větší rozsah hodnot a jemněji členitost než CTime třída, vyžaduje více úložiště na objekt než CTime. Při práci s podkladovým typem DATE je potřeba vzít v úvahu také některé zvláštní aspekty. Další informace o implementaci DATEnaleznete v tématu TypDATE.

COleDateTime Objekty lze použít k vyjádření kalendářních dat mezi 1. lednem 100 a 31. prosincem 9999. COleDateTime objekty jsou hodnoty s plovoucí desetinnou čárkou a přibližným rozlišením 1 milisekund. COleDateTime je založen na datovém DATE typu definovaném v dokumentaci MFC v části COleDateTime::operator DATE. Skutečná implementace DATE přesahuje tyto hranice. Implementace COleDateTime tyto hranice ukládá, aby se usnadnila práce s třídou.

COleDateTime nepodporuje Julian dates. Gregoriánský kalendář se předpokládá, že se prodlouží zpět do 1. ledna 100.

COleDateTime ignoruje letní čas (DST). Následující příklad kódu porovnává dvě metody výpočtu časového rozsahu, který překračuje datum přechodu DST: jeden pomocí CRT a druhý pomocí COleDateTime.

První metoda nastaví dva CTime objekty time1 a time2, na duben 5 a duben 6 pomocí standardních typů C tm struktury a time_t. Kód se zobrazí time1 a time2 časové rozpětí mezi nimi.

Druhá metoda vytvoří dva COleDateTime objekty oletime1 a oletime2a nastaví je na stejná kalendářní data jako time1 a time2. oletime1 Zobrazí a oletime2 časové rozpětí mezi nimi.

CrT správně vypočítá rozdíl 23 hodin. COleDateTimeSpan vypočítá rozdíl 24 hodin.

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

Získání aktuálního času

Následující postup ukazuje, jak vytvořit COleDateTime objekt a inicializovat ho s aktuálním časem.

Získání aktuálního času

  1. Vytvoření objektu COleDateTime

  2. Zavolejte GetCurrentTime.

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

Výpočet uplynulého času

Tento postup ukazuje, jak vypočítat rozdíl mezi dvěma COleDateTime objekty a získat COleDateTimeSpan výsledek.

Výpočet uplynulého času

  1. Vytvořte dva COleDateTime objekty.

  2. Nastavte jeden z COleDateTime objektů na aktuální čas.

  3. Proveďte nějakou časově náročnou úlohu.

  4. Nastavte druhý COleDateTime objekt na aktuální čas.

  5. Vezměte rozdíl mezi těmito dvěma časy.

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

Formátování času

Formátování času

Format Pomocí členské funkce buď COleDateTime nebo COleDateTimeSpan vytvořit znakový řetězec představující čas nebo uplynulý čas.

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.   

Další informace naleznete v tématu třída COleVariant.

Datum a čas: Podpora databáze

Počínaje verzí 4.0 používá COleDateTime programování databáze MFC k reprezentaci dat data a času data a času třídy a COleDateTimeSpan třídy. Tyto třídy, které se také používají ve službě Automation, jsou odvozeny z třídy COleVariant. Poskytují lepší podporu pro správu dat data a času než do CTime a CTimeSpan.

Datum a čas: SYSTEMTIME Podpora

Třída COleDateTime má konstruktory, které přijímají systémové a souborové časy z Win32.

Struktura Win32 FILETIME představuje čas jako 64bitovou hodnotu. Jedná se o pohodlnější formát pro interní úložiště než SYSTEMTIME strukturu a formát používaný Win32 k vyjádření času vytvoření souboru. Informace o struktuře SYSTEMTIME naleznete v tématu SYSTEMTIME. Informace o struktuře FILETIME naleznete v tématu FILETIME.

Viz také

Koncepty
Obecná témata MFC