Väčšina ľahko vziať do úvahy UTC offset oblasti, C++20 <chrono>
je spôsob, ako ísť. Ak máte C++11/14/17, existuje zadarmo, open-source, hlavička iba náhľad tejto časti C++20, ktoré môžu byť použité. A to funguje na oboch Linux a Windows. Ak používate C, toto jednoduché riešenie nie je k dispozícii.
#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';
}
Vyššie uvedené je C++20 riešenie.
Druh sys_seconds
je sekúnd-presné UTC čas. Keď to je rozložený do s parse
sa analyzovaný čas je považovaný za miestneho času, a modifikované analyzovaný UTC offset pred pridelením na sys_seconds
argument. Na E
modifikátor v %Ez
poveruje parse
hľadať :
v kompenzovať. %z
(bez E
) vyzerá na offset formulár hhmm
.
Som nastaviť failbit
v potoku tak, aby každá analyzovať chyby výsledok v hlučnom výnimkou. Ak by ste radšej skontrolovať in.fail()
manuálne, vynechajte nastavenie failbit
.
Raz t1
a t2
sú rozložený do, môžu byť v porovnaní rovnako ako aritmetický typy.
Ak potrebujete použiť zadarmo, open-source, hlavička iba náhľad, stačí pridať #include "date/date.h"
a using namespace date;
vyššie program.
Ak môžete byť istí, že UTC posuny sú vždy rovnaké, potom jednoduchý reťazec porovnanie je dostatočné:
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';
V C (a ak UTC kompenzácie môžu byť rôzne), budete musieť analyzovať ofsety a odčítanie ich od miestneho krát manuálne.