Como comparar dois time stamp no formato “Mês Data hh: mm: ss” para verificar o valor + ve ou -ve

Eu verifiquei o site stackoverflow para a minha resposta, eu não recebi, então eu estou postando aqui.

Meu problema é:

Como comparar dois carimbos no formato "Month Date hh:mm:ss" ?

Eu estou escrevendo o programa em C e C + + e o tempo está no formato de seqüência de caracteres exibível.

Exemplo:

 time1 = "Mar 21 11:51:20" time2 = "Mar 21 10:20:05" 

Quero comparar time1 e tme2 e descobrir se time2 é após time1 ou não e preciso de output como true ou false , como abaixo:

  if time2 > time1 then i need output as 1 or 0 or -1 anything 

Eu usei difftime(time2,time1) , mas retorna o tempo delta diff entre time1 e time2 .
Eu quero verificar maior ou não.

Para qualquer ajuda, obrigado antecipadamente

PRIMEIRO – use difftime para comparar:

você pode simplesmente usar a function difftime() para comparar a hora e retornar 1 ou -1 seguinte maneira:

 int comparetime(time_t time1,time_t time2){ return difftime(time1,time2) > 0.0 ? 1 : -1; } 

SEGUNDO – Converter string em tempo:

Se você tiver dificuldade em converter string em time_t struct, você pode usar duas funções em seqüência:

  1. char *strptime(const char *buf, const char *format, struct tm *tm); function. converter string em struct tm

    Exemplo: para converter a string de data e hora "Mar 21 11:51:20 AM" no struct tm você precisa de três strings de formato:

    % b : nome do mês, pode ser o nome completo ou uma abreviação
    % d : dia do mês [1-31].
    % r : tempo no formato AM / PM da localidade. Se não estiver disponível no formato de hora local, o padrão será o formato de hora AM / PM do POSIX: %I:%M:%S %p .

  2. time_t mktime (struct tm * timeptr); function para converter struct tm* para time_t

Abaixo está o meu programa de exemplo:

 #include  #include  int main(void){ time_t t1, t2; struct tm *timeptr,tm1, tm2; char* time1 = "Mar 21 11:51:20 AM"; char* time2 = "Mar 21 10:20:05 AM"; //(1) convert `String to tm`: if(strptime(time1, "%b %d %r",&tm1) == NULL) printf("\nstrptime failed\n"); if(strptime(time2, "%b %d %r",&tm2) == NULL) printf("\nstrptime failed\n"); //(2) convert `tm to time_t`: t1 = mktime(&tm1); t2 = mktime(&tm2); printf("\n t1 > t2 : %d", comparetime(t1, t2)); printf("\n t2 > t1 : %d", comparetime(t2, t1)); printf("\n"); return 1; } 

E funciona como você deseja:

  $ ./a.out t1 > t2 : 1 t2 > t1 : -1 

Para calcular a diferença entre duas datas, leia: Como você encontra a diferença entre duas datas em horas, em C?

Olhe para o strptime()

Converte uma data / hora formatada em string ASCII em um struct tm

Aqui está uma solução muito fácil para resolver o seu problema. Se no seu caso a comparação depende do tempo. Se assim for, você pode transformar suas variables ​​de tempo em string para que você possa compará-las como uma string. SOMENTE se a base da comparação for a hora e o minuto e os segundos elementos e / ou o dia. Isso parecerá assim:

 string time1 = "Mar 21 11:51:20"; string time2 = "Mar 21 10:20:05"; cout<time2)cout<