Compartilhar via


Data e hora: Suporte de automação

Este artigo descreve como aproveitar os serviços de biblioteca de classes relacionados até agora e de gerenciamento de tempo. Os procedimentos descritos incluem:

A classe de COleDateTime fornece uma maneira para representar as informações de data e hora. Fornece uma mais granularidade fina e um intervalo maior do que a classe de CTime . A classe de COleDateTimeSpan representa o tempo decorrido, como a diferença entre dois objetos de COleDateTime .

As classes de COleDateTime e de COleDateTimeSpan são projetadas para serem usadas com a classe de COleVariant usada na automação. COleDateTime e COleDateTimeSpan também são úteis na programação de banco de dados MFC, mas pode ser usado sempre que você deseja manipular a valores de data e hora. Embora a classe de COleDateTime tem um intervalo de valores e uma maior granularidade mais fina da classe de CTime , requer mais armazenamentos pelo objeto de CTime. Também há algumas considerações especiais ao trabalhar com o tipo subjacente de DATE . Consulte O tipo de DATA para mais detalhes sobre a implementação de DATE.

Os objetos deCOleDateTime podem ser usados para representar datas entre o 1º de janeiro, os 100, e 9999., o 31 de dezembro Os objetos deCOleDateTime são valores de ponto flutuante, com uma resolução aproximada de 1 milissegundos. COleDateTime é baseado no tipo de dados de DATE , definido na documentação MFC em DATA de COleDateTime::operator. A implementação real de DATE ultrapassa de esses limites. A implementação de COleDateTime aplicar esses limites para facilitar trabalhar com a classe.

COleDateTime não suporta datas julianas. O calendário gregoriano é assumido estender o tempo a volta para o 1º de janeiro, 100.

COleDateTime ignora o horário de verão (DST). O exemplo de código a seguir compara dois métodos de calcular um intervalo de tempo que intersecção a data de switchover de DST: um usando o CRT, e o outro COleDateTimedo. Opções de DST em, na maioria das localidades, na segunda semana em abril e. no terceiro em outubro

O primeiro método define dois objetos de CTime , time1 e time2, a o 5 de abril e respectivamente, o 6 de abril usando as estruturas tm e time_tctype do padrão. O código exibe time1 e time2 e o intervalo de tempo entre eles.

O segundo método cria dois objetos, oletime1 e oletime2de COleDateTime , e exibir as mesmas datas que time1 e time2. Exibe 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.

Observe que uma solução alternativa é usada pelo final de exemplo para exibir a data usando COleDateTime::Formatcorretamente. Consulte o artigo de Base de Dados de Conhecimento “INTRODUZIR ERROS DE FUNCIONAMENTO: O formato %D (“”) falha para COleDateTime e 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);
}

Consulte também

Conceitos

Data e hora