2017-09-12 9 views
-5

Ich bin ein Anfänger bei C++ und ich hatte Schwierigkeiten mit Datum verwenden. Ich dachte, die Ctime-Bibliothek könnte hilfreich sein, aber ich bin mir nicht sicher.Vergleichen von Daten in C++

Für mein Programm muss ich jemanden das Datum eingeben, dem sie einem Verein beigetreten sind, dann muss ich das mit dem aktuellen Datum vergleichen, um einen Mitgliedsbeitrag auszuarbeiten.

Ich war mir auch nicht sicher über den besten Weg, um das Datum (z. B. Tag/Monat/Jahr separat oder zusammen als Zeichenfolge eingeben?).

Ich konnte keinen einfachen Weg finden, dies zu tun, und ich würde sehr etwas Hilfe schätzen. Vielen Dank.

+1

Verwirren Sie nicht mit Tag/Monat/Jahr. Verwenden Sie Sekunden nach einem bestimmten Zeitpunkt. – Ripi2

+0

Welcher Befehl würde das beinhalten? Edit: Würde das auch funktionieren, da einige Monate unterschiedliche Längen haben? – stylersolve

+1

http://en.cppreference.com/w/cpp/chrono/time_point – Ripi2

Antwort

0

Referenz https://stackoverflow.com/a/997988/3989888

#include <ctime> 
#include <iostream> 
using namespace std; 

int main() { 
    time_t t = time(0); // get time now 
    struct tm * now = localtime(& t); 
    cout << (now->tm_year + 1900) << ' ' 
     << (now->tm_mon + 1) << ' ' 
     << now->tm_mday 
     << endl; 

    cout<<"Enter Date YYYY MM DD"<<endl; 
    int y,m,d; 
    cin>>y; 
    cin>>m; 
    cin>>d; 

    cout<<"Member since: "<<y-now->tm_year-1900<<" years "<<m-now->tm_mon-1<<" months "<<d-now->tm_mday<<" days "<<endl; 

} 
+0

Vielen Dank! Das ist sehr hilfreich, aber gibt es eine Möglichkeit, die negativen Monate/Tage zu bekämpfen? Vielleicht könnte ich eine if-Anweisung verwenden und sie sortieren (obwohl ich nicht wissen würde, was ich mit Monaten unterschiedlicher Länge machen soll). – stylersolve

3

Sie das Datum aus dem Benutzer erhalten und sie in eine tm Struktur mit strptime analysieren.

Zum Beispiel:

tm timeDate; 
strptime(input_str.c_str(),"%Y-%m-%d %H:%M", &timeDate); // define date/time format convenient for you here; this is just an example 

konvertieren dann zu einem time_t-Typ:

time_t time_input = mktime(&timeDate); 

dann mit einem anderen Time_t vergleichen (erstellt die gleiche Art und Weise oder durch die aktuelle Systemzeit bekommen oder was auch immer Sie brauchen) ;

double timeDiff = difftime(time_input, other_time_t_value); 

Ressourcen verwendet:

time tutorial

similar question

related question

Eine weitere Option die Boost-Datetime-Bibliothek (ich es selbst so gewann ich‘mich nicht erinnern, verwenden könnte t mehr als beziehen Sie sich) empfohlen here

Ein Hinweis für andere, die diese Frage lesen: Das OP, glaube ich, benutzt C++ 11 oder später nicht. Wenn Sie sind, könnte this answer für Sie besser sein.

+0

Danke. Muss ich die Zeit einbeziehen oder finde ich den Unterschied im Datum? – stylersolve

+0

Sie können nur das Datum verwenden, glaube ich. Verwenden Sie nur die Datumselemente in der Formatzeichenfolge. – Basya

+0

Ich nehme an, dass ich sie die Y, m und d-Variablen eingeben lassen würde? Das scheint nützlich zu sein, danke. – stylersolve

0

Ernsthaft jetzt? Bitte schreiben Sie modernen Code und verwenden Sie. std::chrono::duration.

So etwas wie

#include <chrono> 
#include <iostream> 

int main() { 
    auto long_ago = 
    std::chrono::system_clock::time_point(); 
    std::chrono::duration<double> diff = 
    std::chrono::system_clock::now() - long_ago; 
    std::cout << "Seconds since Jan 1 1970: " << diff.count() << std::endl; 
} 
+0

# 1: Bitte sei respektvoll gegenüber anderen. # 2: Der OP kommentierte, dass er keinen Compiler verwendet, der dies unterstützt. – Basya