read libreria ejemplo biblioteca c++ c time comparison

libreria - read time c++



Cómo comparar dos marcas de tiempo en el formato "Mes Fecha hh: mm: ss" para verificar el valor+ve o-ve (3)

Mira strptime()

Convierte una fecha / hora con formato de cadena ASCII en una struct tm

Revisé el sitio stackoverflow para mi respuesta, no lo recibí, así que lo estoy publicando aquí.

Mi problema es:

Cómo comparar dos marcas de tiempo en el formato "Month Date hh:mm:ss" ?

Estoy escribiendo un programa en C y C ++ y la hora está en formato de cadena visualizable.

Ejemplo:

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

Quiero comparar time1 y tme2 y averiguar si time2 es después de time1 o no y necesito salida como true o false , como a continuación:

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

difftime(time2,time1) , pero devuelve la diff tiempo delta entre time1 y time2 .
Quiero comprobar más o no.

Para cualquier ayuda, gracias de antemano


Aquí hay una solución muy fácil para resolver su problema. Si en tu caso la comparación depende del tiempo. Si es así, puede convertir sus variables de tiempo en una cadena para que pueda compararlas como una cadena. SOLO si la base de la comparación es la hora y los minutos y segundos elementos y / o el día. Se verá así:

string time1 = "Mar 21 11:51:20"; string time2 = "Mar 21 10:20:05"; cout<<time1<< endl; cout<<time2<< endl; cout<<endl; if(time1>time2)cout<<time1<< endl; else cout << time2 << endl;


PRIMERO- use difftime para comparar:

simplemente puede usar la función difftime() para comparar el tiempo y devolver 1 o -1 siguiente manera:

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

SEGUNDO- Convierte cadena en tiempo:

Si tiene dificultades para convertir string en time_t struct, puede usar dos funciones en secuencia:

  1. char *strptime(const char *buf, const char *format, struct tm *tm); función. para convertir cadena en struct tm

    Ejemplo: para convertir la cadena de fecha y hora "Mar 21 11:51:20 AM" en struct tm necesita tres cadenas de formato:

    % b : Month name, puede ser el nombre completo o una abreviatura
    % d : día del mes [1-31].
    % r : tiempo en formato AM / PM de la configuración regional. Si no está disponible en el formato de hora local, el valor predeterminado es el formato de hora POS / AM: %I:%M:%S %p .

  2. time_t mktime (struct tm * timeptr); función para convertir struct tm* en time_t

Debajo está mi programa de ejemplo:

#include <stdio.h> #include <time.h> 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; }

Y funciona como lo deseas:

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

Para calcular la diferencia entre dos fechas, lea: ¿Cómo encuentra la diferencia entre dos fechas en horas, en C?