De plus facilement prendre en compte le décalage UTC champ, C++20 <chrono>
est le chemin à parcourir. Si vous avez le C++11/14/17, il existe un logiciel gratuit, open-source, en-tête uniquement aperçu de cette partie du C++20 qui peut être utilisé. Et il fonctionne sur Linux et Windows. Si vous êtes à l'aide de C, cette solution simple n'est pas disponible.
#include <chrono>
#include <iostream>
#include <sstream>
int
main()
{
using namespace std;
using namespace std::chrono;
string string1 = "1997-07-16T19:20:30+01:00";
string string2 = "2000-07-17T20:20:30+01:00";
sys_seconds t1, t2;
string format = "%FT%T%Ez";
istringstream in{string1};
in.exceptions(ios::failbit);
in >> parse(format, t1);
in.clear();
in.str(string2);
in >> parse(format, t2);
if (t1 > t2)
cout << string1 << " is later than " << string2 << '\n';
else if (t2 > t1)
cout << string2 << " is later than " << string1 << '\n';
else
cout << string1 << " is the same time as " << string2 << '\n';
}
Ci-dessus est le C++20 solution.
Le type sys_seconds
est secondes-précision horodatage UTC. Lorsque ceci est analysé avec parse
, l'analyse du temps est considéré comme temps local, et modifié par l'analyse décalage UTC avant d'être affecté à l' sys_seconds
argument. L' E
modificateur dans %Ez
charge parse
de chercher pour le :
le décalage. %z
(sans le E
) recherche pour un décalage de la forme hhmm
.
J'ai réglé le failbit
dans le cours d'eau de sorte que les éventuelles erreurs d'analyse le résultat dans un bruyant exception. Si vous préférez vérifier in.fail()
manuellement, omettre le paramètre failbit
.
Une fois t1
et t2
sont analysées dans, ils peuvent être comparés juste comme l'arithmétique types.
Si vous devez utiliser le logiciel gratuit, open-source, en-tête uniquement aperçu, il suffit d'ajouter #include "date/date.h"
et using namespace date;
le programme ci-dessus.
Si vous pouvez être assuré que les décalages horaires sont toujours égaux, alors qu'une simple comparaison de chaîne est suffisante:
if (string1 > string2)
cout << string1 << " is later than " << string2 << '\n';
else if (string2 > string1)
cout << string2 << " is later than " << string1 << '\n';
else
cout << string1 << " is the same time as " << string2 << '\n';
En C (et si les décalages horaires peuvent être différents), vous aurez à analyser les décalages et les soustraire de l'heure locale manuellement.