2016-06-04 6 views
3

Mein Lehrer time_point sagte, dass ich die Datei mit Zeilen wie das konvertieren:C++ Wie Datum vom Eingang (string Jahr, string Monat, string Tag) konvertieren

Jan Kowalski 1997 4 3 

Klasse Person mit Pools wie :

string name, surname; 
std::chrono::system_clock::time_point dateofbirth; 

Wie kann ich Zeitpunkt von 3 Ganzzahlen erstellen? Ich nehme an, es ist nicht der einfachste Weg, diese Art von Daten zu speichern.

„Ein Verweis auf einen bestimmten Zeitpunkt, wie ein Geburtstag, den heutigen Morgendämmerung, oder wann der nächste Zug fährt. In dieser Bibliothek Objekte der time_point Klassenvorlage ausdrücken diese durch eine Dauer in Bezug auf eine Verwendung epoch (das ist ein fester Zeitpunkt, der allen time_point-Objekten gemeinsam ist, die denselben Takt verwenden). "

Aber wie kann ich aus diesen Daten Dauer machen?

nehme ich mich mit so etwas wie anfangen sollte:

using std::chrono::system_clock; 
system_clock::time_point today = system_clock::now(); 
std::chrono::duration<int, std::ratio<60 * 60 * 24> > one_day; 
+0

Ich bin mir nicht sicher, aber vielleicht [From_time_t] (http://en.cppreference.com/w/cpp/chrono/system_clock/from_time_t) kann dein Freund sein? – incBrain

+2

Eine Schule, die modernes C++ für echt unterrichtet? Beeindruckend! –

Antwort

1

Sie beginnen können durch Speicher das Geburtsdatum in std :: tm (http://en.cppreference.com/w/cpp/chrono/c/tm), eine Struktur, die eine hält Datums und Zeit aufgeschlüsselt in seine Komponenten . Zum Beispiel:

std::tm tm; 
tm.tm_mday = 3; 
tm.tm_mon = 4; 
tm.tm_year = 1977; 

Diese std :: tm Struktur kann std :: umgewandelt werden time_t (http://en.cppreference.com/w/c/chrono/time_t), die die Anzahl der Sekunden seit Epoche hält.

std::time_t tt = timegm(&tm); 

Was wiederum verwendet werden kann, die std :: Chrono :: System_Clock :: time_point Sie suchen zu erstellen:

std::chrono::system_clock::time_point dateofbirth = std::chrono::system_clock::from_time_t(tt); 
+1

Ich habe es so gemacht: 'std :: tm timeinfo = std :: tm(); \t timeinfo.tm_year = rok - 1900; // Jahr seit 1900 ex. 100 = 2000 \t timeinfo.tm_mon = miesiac - 1; // Monat: Januar \t timeinfo.tm_mday = dzien; // Tag: 1. \t Std :: time_t tt = Std :: mktime (& Zeitinfo); \t ur = system_clock :: from_time_t (tt); ' –

3

sind mehrere Datum Algorithmen Low-Level Hier die verwendet werden können konvertieren drei ganze Zahlen in eine std::chrono::system_clock::time_point:

chrono-Compatible Low-Level Date Algorithms

Sie können dieses Papier als Kochbuch anzeigen, um den Algorithmusabschnitt einer Datumsklasse zu schreiben.

Hier ist ein Beispiel für eine Datumsklasse basierend auf diesen Algorithmen. Es enthält einen Typalias namens days, der Ihrem one_day sehr ähnlich ist.

date

Hier ist eine Bibliothek, die Zeitzone auf der date gebaut, die eine parse Funktion enthält, die verwendet werden können Termine (und Zeiten) aus Dateien zu analysieren:

Time Zone Database Parser

Da dies Hausaufgaben ist, möchten Sie vielleicht nur wollen um mit dem zugrundeliegenden Algorithmus Papier zu bleiben.

+0

Das habe ich getan:' std :: tm timeinfo = std :: tm(); \t timeinfo.tm_year = rok - 1900; // Jahr seit 1900 ex. 100 = 2000 \t timeinfo.tm_mon = miesiac - 1; // Monat: Januar \t timeinfo.tm_mday = dzien; // Tag: 1. \t Std :: time_t tt = Std :: mktime (& Zeitinfo); \t ur = system_clock :: from_time_t (tt); ' –