Pentru cele mai ușor să ia în considerare decalajul UTC domeniu, C++20 <chrono>
este calea de a merge. Dacă aveți C++11/14/17, există un program gratuit, open-source, antet-doar preview din această parte de C++20, care pot fi utilizate. Și acesta funcționează atât pe Windows și Linux. Dacă utilizați C, această soluție simplă nu este disponibil.
#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';
}
De mai sus este C++20 de soluție.
Tipul sys_seconds
este o secunde precizie UTC timestamp. Atunci când acest lucru este analizat în cu parse
, a analizat timp este considerat ca ora locală, și a fost modificat de analizat UTC offset înainte de a fi atribuit sys_seconds
argument. La E
modificator în %Ez
instruiește parse
să se uite pentru :
în offset. %z
(fără E
) se pare pentru un offset de forma hhmm
.
Am setat failbit
în flux, astfel încât orice analiza erorile rezultat un spectacol de excepție. Dacă ar mai degrabă pentru a verifica in.fail()
manual, omite stabilirea failbit
.
O dată t1
și t2
sunt analizate în, ele pot fi comparate doar ca tipuri de aritmetică.
Dacă aveți nevoie pentru a utiliza gratuit, open-source, antet-doar preview, trebuie doar să adăugați #include "date/date.h"
și using namespace date;
pentru programul de mai sus.
Dacă puteți fi siguri că UTC compensările sunt întotdeauna egale, atunci un simplu șir de comparație este suficientă:
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';
În C (iar dacă UTC offset pot fi diferite), va trebui să elimine decalajele și le scade din local ori manual.