K nejvíce snadno vzít v úvahu časový posun pole, C++20 <chrono>
je způsob, jak jít. Pokud máte C++11/14/17, existuje zdarma, open-source, header-pouze náhled této části C++20, které mohou být použity. A to funguje na Linuxu a Windows. Pokud používáte C, toto jednoduché řešení není k dispozici.
#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';
}
Výše uvedené je C++20 řešení.
Typ sys_seconds
je několik sekund-přesnost časové razítko UTC. Když tento je analyzován do s parse
, analyzovat čas je považován za místního času, a modifikován analyzován posun vůči UTC předtím, než je přidělen k sys_seconds
argument. Na E
modifikátor %Ez
pověřuje parse
hledat :
v offset. %z
(bez E
) vypadá pro ofsetový formuláře hhmm
.
Jsem nastavit failbit
v proudu tak, že každý analyzovat chyby, výsledek v hlučném výjimkou. Pokud byste raději zkontrolovat in.fail()
ruční, vynechat nastavení failbit
.
Jednou t1
a t2
jsou analyzovány do, mohou být v porovnání jen jako aritmetické typy.
Pokud potřebujete používat zdarma, open-source, header-pouze náhled, stačí přidat #include "date/date.h"
a using namespace date;
do výše uvedeného programu.
Pokud můžete být jisti, že UTC kompenzace jsou vždy stejné, pak jednoduchý řetězec srovnání je dostačující:
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 pokud UTC offsety mohou být různé), budete muset analyzovat posuny a odečíst je z místní časy ručně.