Data e ora
MFC supporta diversi modi di lavorare con date e ore:
Supporto per il tipo di dati di Automazione.
DATE
DATE
supporta valori di data, ora e data/ora. LeCOleDateTime
classi eCOleDateTimeSpan
incapsulano questa funzionalità. Funzionano con la classe usando ilCOleVariant
supporto di Automazione.Classi temporali per utilizzo generico. Le
CTime
classi eCTimeSpan
incapsulano la maggior parte delle funzionalità associate alla libreria temporale standard ANSI, dichiarata intime.h
.Supporto per l'orologio di sistema. Con MFC versione 3.0, è stato aggiunto il supporto a
CTime
per i tipi di dati Win32SYSTEMTIME
eFILETIME
.
Data e ora: supporto per l'automazione
La COleDateTime
classe fornisce un modo per rappresentare le informazioni di data e ora. Offre una granularità più fine e un intervallo maggiore rispetto alla CTime
classe . La COleDateTimeSpan
classe rappresenta il tempo trascorso, ad esempio la differenza tra due COleDateTime
oggetti.
Le COleDateTime
classi e COleDateTimeSpan
sono progettate per l'uso con la COleVariant
classe . COleDateTime
e COleDateTimeSpan
sono utili anche nella programmazione del database MFC, ma possono essere usati ogni volta che si desidera modificare i valori di data e ora. Anche se la COleDateTime
classe ha un intervallo di valori maggiore e una granularità più fine rispetto alla CTime
classe , richiede più spazio di archiviazione per oggetto rispetto CTime
a . Esistono anche alcune considerazioni speciali quando si lavora con il tipo DATE sottostante. Per altre informazioni sull'implementazione di DATE
, vedere Il DATE
tipo.
COleDateTime
Gli oggetti possono essere utilizzati per rappresentare le date comprese tra il 1° gennaio 100 e il 31 dicembre 9999. COleDateTime
gli oggetti sono valori a virgola mobile, con una risoluzione approssimativa di 1 millisecondo. COleDateTime
è basato sul DATE
tipo di dati, definito nella documentazione MFC in COleDateTime::operator DATE
. L'implementazione effettiva di DATE
si estende oltre questi limiti. L'implementazione COleDateTime
impone questi limiti per semplificare l'uso della classe .
COleDateTime
non supporta date julian. Si presuppone che il calendario gregoriano si estenda nel tempo fino al 1° gennaio 100.
COleDateTime
ignora l'ora legale (DST). Nell'esempio di codice seguente vengono confrontati due metodi per calcolare un intervallo di tempo che interseca la data di passaggio dell'ora DST: uno che usa CRT e l'altro usando COleDateTime
.
Il primo metodo imposta rispettivamente due CTime
oggetti, time1
e time2
, rispettivamente il 5 aprile e il 6 aprile, usando le strutture tm
di tipo C standard e time_t
. Il codice visualizza time1
e time2
l'intervallo di tempo tra di essi.
Il secondo metodo crea due COleDateTime
oggetti oletime1
e oletime2
e li imposta sulle stesse date di time1
e time2
. Viene visualizzato oletime1
e oletime2
l'intervallo di tempo tra di essi.
CRT calcola correttamente una differenza di 23 ore. COleDateTimeSpan
calcola una differenza di 24 ore.
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);
}
Ottiene l'ora corrente
La procedura seguente illustra come creare un COleDateTime
oggetto e inizializzarlo con l'ora corrente.
Per ottenere l'ora corrente
Creare un oggetto
COleDateTime
.Chiamare
GetCurrentTime
.COleDateTime timeNow; timeNow = COleDateTime::GetCurrentTime();
Calcolare il tempo trascorso
Questa procedura illustra come calcolare la differenza tra due COleDateTime
oggetti e ottenere un COleDateTimeSpan
risultato.
Per calcolare il tempo trascorso
Creare due
COleDateTime
oggetti.Impostare uno degli
COleDateTime
oggetti sull'ora corrente.Eseguire un'attività dispendiosa in termini di tempo.
Impostare l'altro
COleDateTime
oggetto sull'ora corrente.Prendere la differenza tra le due volte.
COleDateTime timeStart, timeEnd; timeStart = COleDateTime::GetCurrentTime(); // ... perform time-consuming task timeEnd = COleDateTime::GetCurrentTime(); COleDateTimeSpan spanElapsed = timeEnd - timeStart;
Formattare un'ora
Per formattare un'ora
Utilizzare la Format
funzione membro di o COleDateTimeSpan
per creare una stringa di COleDateTime
caratteri che rappresenta il tempo o il tempo trascorso.
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.
Per ulteriori informazioni, vedere la classe COleVariant
.
Data e ora: supporto per database
A partire dalla versione 4.0, la programmazione del database MFC usa le COleDateTime
classi e COleDateTimeSpan
per rappresentare i dati di data e ora. Queste classi, usate anche in Automazione, sono derivate dalla classe COleVariant
. Forniscono un supporto migliore per la gestione dei dati di data e ora rispetto CTime
a e CTimeSpan
.
Data e ora: SYSTEMTIME
supporto
La COleDateTime
classe include costruttori che accettano tempi di sistema e file da Win32.
La struttura Win32 FILETIME
rappresenta l'ora come valore a 64 bit. È un formato più pratico per l'archiviazione interna rispetto a una SYSTEMTIME
struttura e il formato usato da Win32 per rappresentare l'ora di creazione del file. Per informazioni sulla SYSTEMTIME
struttura, vedere SYSTEMTIME
. Per informazioni sulla FILETIME
struttura, vedere FILETIME
.