Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Observação
A biblioteca Microsoft Foundation Classes (MFC) e a Active Template Library (ATL) continuam a ser suportadas. No entanto, já não estamos a adicionar funcionalidades nem a atualizar a documentação.
O MFC suporta várias formas diferentes de trabalhar com datas e horários:
Suporte para o tipo de dados Automação
DATE.DATEsuporta valores de data, hora e data/hora. AsCOleDateTimeclasses eCOleDateTimeSpanencapsulam esta funcionalidade. Eles trabalham com aCOleVariantturma usando suporte de Automação.Aulas de tempo de uso geral. As
CTimeclasses eCTimeSpanencapsulam a maior parte da funcionalidade associada à biblioteca de tempo padrão ANSI, que é declarada emtime.h.Suporte para relógio do sistema. Com a versão 3.0 do MFC, foi adicionado
CTimesuporte para o Win32SYSTEMTIMEeFILETIMEos tipos de dados.
Data e Hora: Suporte à Automação
A COleDateTime aula oferece uma forma de representar informações sobre data e hora. Proporciona uma granularidade mais fina e uma maior variedade do que a CTime classe. A COleDateTimeSpan classe representa o tempo decorrido, como a diferença entre dois COleDateTime objetos.
As COleDateTime classes e COleDateTimeSpan são concebidas para serem usadas com a COleVariant turma.
COleDateTime e COleDateTimeSpan também são úteis na programação de bases de dados MFC, mas podem ser usadas sempre que quiser manipular valores de data e hora. Embora a COleDateTime classe tenha uma gama maior de valores e uma granularidade mais fina do que a CTime classe, requer mais armazenamento por objeto do que CTime. Existem também algumas considerações especiais ao trabalhar com o tipo DATE subjacente. Para mais informações sobre a implementação de DATE, veja O DATE Tipo.
COleDateTime os objetos podem ser usados para representar datas entre 1 de janeiro de 100 e 31 de dezembro de 9999.
COleDateTime os objetos são valores de ponto flutuante, com uma resolução aproximada de 1 milissegundo.
COleDateTime baseia-se no DATE tipo de dados, definido na documentação MFC sob COleDateTime::operator DATE. A implementação real de DATE vai além desses limites. A COleDateTime implementação impõe estes limites para facilitar o trabalho com a classe.
COleDateTime não apoia as datas Julian. Assume-se que o calendário gregoriano recua no tempo até 1 de janeiro de 100.
COleDateTime ignora o Horário de Verão (DST). O seguinte exemplo de código compara dois métodos de cálculo de um intervalo de tempo que cruza a data de mudança do horário de verão: um usando o CRT e outro usando COleDateTime.
O primeiro método define dois CTime objetos, time1 e time2, para 5 de abril e 6 de abril, respetivamente, usando as estruturas tm padrão do tipo C e time_t. O código mostra time1 e time2 e o intervalo de tempo entre eles.
O segundo método cria dois COleDateTime objetos, oletime1 e oletime2, e define-os para as mesmas datas que time1 e time2. Mostra oletime1 e oletime2 e o intervalo de tempo entre eles.
O CRT calcula corretamente uma diferença de 23 horas.
COleDateTimeSpan calcula uma diferença de 24 horas.
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);
}
Obtenha a hora atual
O procedimento seguinte mostra como criar um COleDateTime objeto e inicializá-lo com o tempo atual.
Para chegar à hora atual
Crie um
COleDateTimeobjeto.Ligue para o
GetCurrentTime.COleDateTime timeNow; timeNow = COleDateTime::GetCurrentTime();
Calcular o tempo decorrido
Este procedimento mostra como calcular a diferença entre dois COleDateTime objetos e obter um COleDateTimeSpan resultado.
Para calcular o tempo decorrido
Cria dois
COleDateTimeobjetos.Defina um dos
COleDateTimeobjetos para a hora atual.Realiza uma tarefa que consume muito tempo.
Define o outro
COleDateTimeobjeto para a hora atual.Pegue na diferença entre as duas vezes.
COleDateTime timeStart, timeEnd; timeStart = COleDateTime::GetCurrentTime(); // ... perform time-consuming task timeEnd = COleDateTime::GetCurrentTime(); COleDateTimeSpan spanElapsed = timeEnd - timeStart;
Formatar uma hora
Para formatar uma hora
Use a Format função membro de um ou COleDateTimeCOleDateTimeSpan para criar uma cadeia de caracteres que represente o tempo ou tempo decorrido.
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.
Para mais informações, veja a classe COleVariant.
Data e Hora: Suporte à Base de Dados
A partir da versão 4.0, a programação de bases de dados MFC utiliza as COleDateTime classes e COleDateTimeSpan para representar dados de data e hora. Estas classes, também usadas em Automação, derivam da classe COleVariant. Eles oferecem melhor suporte para gerir dados de data e hora do que o Do CTime e CTimeSpan.
Data e Hora: SYSTEMTIME Suporte
A COleDateTime classe tem construtores que aceitam tempos de sistema e ficheiros do Win32.
A estrutura Win32 FILETIME representa o tempo como um valor de 64 bits. É um formato mais conveniente para armazenamento interno do que uma SYSTEMTIME estrutura, e o formato usado pelo Win32 para representar o momento de criação do ficheiro. Para informações sobre a SYSTEMTIME estrutura, veja SYSTEMTIME. Para informações sobre a FILETIME estrutura, veja FILETIME.