Data e hora C ++

A biblioteca padrão C ++ não fornece um tipo de data adequado. C ++ herda as estruturas e funções para manipulação de data e hora de C. Para acessar funções e estruturas relacionadas a data e hora, você precisaria incluir o arquivo de cabeçalho <ctime> em seu programa C ++.

Existem quatro tipos relacionados ao tempo: clock_t, time_t, size_t, e tm. Os tipos - clock_t, size_t e time_t são capazes de representar a hora e a data do sistema como algum tipo de número inteiro.

O tipo de estrutura tm contém a data e hora na forma de uma estrutura C com os seguintes elementos -

struct tm {
   int tm_sec;   // seconds of minutes from 0 to 61
   int tm_min;   // minutes of hour from 0 to 59
   int tm_hour;  // hours of day from 0 to 24
   int tm_mday;  // day of month from 1 to 31
   int tm_mon;   // month of year from 0 to 11
   int tm_year;  // year since 1900
   int tm_wday;  // days since sunday
   int tm_yday;  // days since January 1st
   int tm_isdst; // hours of daylight savings time
}

A seguir estão as funções importantes, que usamos ao trabalhar com data e hora em C ou C ++. Todas essas funções fazem parte da biblioteca padrão C e C ++ e você pode verificar seus detalhes usando a referência à biblioteca padrão C ++ fornecida abaixo.

Sr. Não Função e objetivo
1

time_t time(time_t *time);

Isso retorna a hora do calendário atual do sistema em segundos decorridos desde 1 de janeiro de 1970. Se o sistema não tiver hora, .1 será retornado.

2

char *ctime(const time_t *time);

Isso retorna um ponteiro para uma string na forma dia mês ano horas: minutos: segundos ano \ n \ 0 .

3

struct tm *localtime(const time_t *time);

Isso retorna um ponteiro para o tm estrutura que representa a hora local.

4

clock_t clock(void);

Isso retorna um valor que se aproxima da quantidade de tempo que o programa de chamada está em execução. Um valor de .1 é retornado se o tempo não estiver disponível.

5

char * asctime ( const struct tm * time );

Isso retorna um ponteiro para uma string que contém as informações armazenadas na estrutura apontada pelo tempo convertido na forma: dia mês data horas: minutos: segundos ano \ n \ 0

6

struct tm *gmtime(const time_t *time);

Isso retorna um ponteiro para a hora na forma de uma estrutura tm. A hora é representada no Tempo Universal Coordenado (UTC), que é essencialmente o Horário de Greenwich (GMT).

7

time_t mktime(struct tm *time);

Isso retorna o tempo de calendário equivalente ao tempo encontrado na estrutura apontada por tempo.

8

double difftime ( time_t time2, time_t time1 );

Esta função calcula a diferença em segundos entre o tempo1 e o tempo2.

9

size_t strftime();

Esta função pode ser usada para formatar a data e a hora em um formato específico.

Data e hora atuais

Suponha que você queira recuperar a data e hora atuais do sistema, seja como hora local ou como Hora Universal Coordenada (UTC). A seguir está o exemplo para conseguir o mesmo -

#include <iostream>
#include <ctime>

using namespace std;

int main() {
   // current date/time based on current system
   time_t now = time(0);
   
   // convert now to string form
   char* dt = ctime(&now);

   cout << "The local date and time is: " << dt << endl;

   // convert now to tm struct for UTC
   tm *gmtm = gmtime(&now);
   dt = asctime(gmtm);
   cout << "The UTC date and time is:"<< dt << endl;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

The local date and time is: Sat Jan  8 20:07:41 2011

The UTC date and time is:Sun Jan  9 03:07:41 2011

Formatar hora usando struct tm

o tmA estrutura é muito importante ao trabalhar com data e hora em C ou C ++. Essa estrutura contém a data e a hora na forma de uma estrutura C, conforme mencionado acima. Na maioria das vezes, as funções relacionadas fazem uso da estrutura tm. A seguir está um exemplo que faz uso de várias funções relacionadas a data e hora e estrutura tm -

Ao usar a estrutura neste capítulo, estou supondo que você tem um conhecimento básico sobre a estrutura C e como acessar os membros da estrutura usando o operador seta ->.

#include <iostream>
#include <ctime>

using namespace std;

int main() {
   // current date/time based on current system
   time_t now = time(0);

   cout << "Number of sec since January 1,1970 is:: " << now << endl;

   tm *ltm = localtime(&now);

   // print various components of tm structure.
   cout << "Year:" << 1900 + ltm->tm_year<<endl;
   cout << "Month: "<< 1 + ltm->tm_mon<< endl;
   cout << "Day: "<< ltm->tm_mday << endl;
   cout << "Time: "<< 5+ltm->tm_hour << ":";
   cout << 30+ltm->tm_min << ":";
   cout << ltm->tm_sec << endl;
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Number of sec since January 1,1970 is:: 1588485717
Year:2020
Month: 5
Day: 3
Time: 11:31:57