Data e time: Suporte de automação

Este artigo descreve como usufruir as vantagens dos serviços de biblioteca de classes relacionados ao gerenciamento de data e time.Os procedimentos descritos incluem:

The COleDateTime classe fornece uma maneira de representar as informações de data e time.Ele fornece granularidade mais fina e um intervalo maior do que o CTime classe.The COleDateTimeSpan classe representa o time decorrido, tais sistema autônomo a diferença entre dois COleDateTime objetos.

The COleDateTime e COleDateTimeSpan classes são projetados para ser usado com o COleVariant classe usada na automação. COleDateTime e COleDateTimeSpan também são úteis na programação de banco de dados MFC, mas pode ser usados sempre que desejar manipular valores de data e time. Embora o COleDateTime classe tem uma variedade maior de valores e granularidade mais fina do que o CTime classe, ela requer mais armazenamento por objeto que não CTime. Também há algumas considerações especiais ao trabalhar com a base DATA tipo.See O tipo de data para obter mais detalhes sobre a implementação de DATA.

COleDateTime objetos podem ser usados para representar datas entre 1 de janeiro de 100 e 31 de dezembro de 9999. COleDateTime objetos são flutuante valores de ponto, com uma resolução aproximada de 1 milissegundo. COleDateTime se baseia o DATA tipo de dados de , definido na documentação do MFC em COleDateTime::operador DATE.A implementação real de DATA se estende além desses limites.The COleDateTime implementação impõe esses limites para facilitar o trabalho com a classe.

COleDateTime não dá suporte a datas do calendário juliano. Presume-se que o calendário gregoriano para estender novamente no time para 1 de janeiro de 100.

COleDateTime ignora o horário de verão (DST). O exemplo de código a seguir compara os dois métodos de cálculo de um intervalo de time que cruza a data de mudança do DST: um usando a CRT e a Outros usando COleDateTime. DST switches, na maioria das localidades, na segunda semana de abril e o terceiro de outubro.

O primeiro método define dois CTime objetos, tempo1 and hora2, 5 de abril e 6 de abril respectivamente, usando o tipo padrão C estruturas TM and time_t. O código exibe tempo1 and hora2 e o time variam entre eles.

O segundo método cria dois COleDateTime objetos, oletime1 e oletime2e define-sistema autônomo para sistema autônomo mesmas datas sistema autônomo tempo1 and hora2.Ele exibe oletime1 e oletime2 e o intervalo de time entre eles.

A CRT corretamente calcula uma diferença de 23 horas.COleDateTimeSpan Calcula a diferença de 24 horas.

Observe que uma solução alternativa é usada no participante do exemplo para exibir a data corretamente usando COleDateTime::Format. Consulte o artigo na Base de dados de Conhecimento "bug: Falha de Format("%D") paraCOleDateTime 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