Udostępnij za pośrednictwem


Data i godzina: automatyzacja obsługi

W tym artykule opisano jak korzystać z usług biblioteki klas związanych z zarządzaniem Data i godzina.Procedury opisane obejmują:

COleDateTime klasy zapewnia sposób reprezentacji Data i godzina.Udostępnia bardziej szczegółowy i większy niż zakres CTime klasy.COleDateTimeSpan klasy reprezentuje upłyniętego czasu różnicę między dwoma COleDateTime obiektów.

COleDateTime i COleDateTimeSpan klas są przeznaczone do użycia z COleVariant klasa używana w automatyzacji.COleDateTimei COleDateTimeSpan są również przydatne w programowaniu bazy danych MFC, ale mogą być używane, gdy chcesz manipulować wartości daty i godziny.Chociaż COleDateTime klasa ma większy zakres wartości i bardziej szczegółowy niż CTime klasy, wymaga więcej miejsca na obiekt niż CTime.Istnieją również niektóre szczególne zagadnienia podczas pracy z podstawowych Data typu.Zobacz typu Data więcej szczegółów na temat realizacji Data.

COleDateTimeobiekty można reprezentować dat między 1 stycznia 100 a 31 grudnia 9999.COleDateTimeobiekty są zmiennoprzecinkowych, z przybliżoną rozdzielczość 1 milisekundy.COleDateTimejest oparta na Data typu danych, określonych w dokumentacji MFC pod COleDateTime::operator Data.Faktycznej realizacji Data wykracza poza te granice.COleDateTime Wykonania nakłada te granice, aby ułatwić pracę z klasy.

COleDateTimenie obsługuje dat w formacie juliańskim.Kalendarz gregoriański zakłada, że rozszerzenie wstecz do dnia 1 stycznia 100.

COleDateTimeignoruje czasu letniego (DST).Poniższy przykład kodu porównuje dwie metody obliczania zakresu czasu, który przecina Data przełączenie czasu letniego: jeden użyciu CRT i inne COleDateTime.DST przełączniki, w większości języków, w drugim tygodniu w kwietniu, a trzeci w październiku.

Pierwsza metoda ustawia dwa CTime obiektów, godziny1 i time2, 5 kwietnia i 6 kwietnia odpowiednio przy użyciu struktur standardowego typu c tm i time_t.Wyświetla kod godziny1 i time2 i zakresu czasu między nimi.

Druga metoda tworzy dwa COleDateTime obiektów, oletime1 i oletime2i ustawia je do tej samej daty jako godziny1 i time2.Wyświetla oletime1 i oletime2 i zakresu czasu między nimi.

CRT poprawnie oblicza różnicę 23 godzin.COleDateTimeSpanoblicza różnicę 24 godzin.

Uwaga obejścia tego problemu jest używany w pobliżu końca przykład do wyświetlania daty poprawnie przy użyciu COleDateTime::Format.Zobacz artykuł bazy wiedzy Knowledge Base "Błąd: nie powiedzie się Format("%D") COleDateTime i 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);
}

Zobacz też

Koncepcje

Data i godzina