alter berechnen
-
Wozu über time gehen? Alter ist doch einfach Jahreszahl2 - Jahreszahl1 und dann muss man eben noch Monat und Tag vergleichen. :p
-
ich möchte das aktuelle datum nicht eingeben, sondern es passend formatiert mit time generieren.
das ganze bräuchte ich dann nur als int, damit ich die differenz berechnen kann.das größte problem ist dann noch die form TT.MM.JJJJ...
-
#include <iostream> #include <sstream> using namespace std; int main() { cout << "Gib Datum ein (TT.MM.JJJJ):\n"; int tag, monat, jahr; cin >> tag; cin.ignore(); cin >> monat; cin.ignore(); cin >> jahr; cout << tag << '/' << monat << '/' << jahr << '\n'; }
-
lukrass schrieb:
ich möchte das aktuelle datum nicht eingeben, sondern es passend formatiert mit time generieren.
das ganze bräuchte ich dann nur als int, damit ich die differenz berechnen kann.Mit localtime kannst du aus der Zeit die du von time bekommst ein struct tm machen. Und aus dem kannst du dir die Werte holen die du brauchst.
-
vielen dank schonmal an Belli für den cin.ignore()-befehl!
auch wenn ich das nicht gerne schreibe, aber diese time-geschichte raubt mir echt die letzten nerven.
ich habe bisher noch nie mit zeigern gearbeitet und verstehe den code dementsprechend auch nicht so recht.
könnte den code evtl. jemand für mich kommentieren bis zum cout?time_t zeit; struct tm *datum; zeit = time(0); datum = localtime(&zeit); cout << datum->tm_mday << '.' << datum->tm_mon+1 << '.' << datum->tm_year+1900 << endl << endl;
mein vorhaben ist es die einzelnen datumsteile (jahr, monat, tag) irgendwie als int in der form JJJJMMTT zusammenzusetzen, um einen brauchbaren minuenden zu haben.
das gleiche soll natürlich für die geburtstagseingabe mit der form TT.MM.JJJJ passieren.dafür müsste ich für den monat und für den tag auch noch jeweils eine führende 0 vor den einstelligen integer-wert hängen, damit ich auch wirklich immer einen 8-stelligen block der form JJJJMMTT bekomme.
geht das überhaupt?
oder denke ich einfach nur zu kompliziert?ich bin da immo leider echt überfragt.
-
Wenn dus im JJJJMMTT haben willst, dann mach doch für die eingabe:
jahr*10000 + monat*100 + tag
-
vielen dank Welzo für die simple, aber so logische idee!
das programm funktioniert jetzt so, wie ichs mir vorgestellt habe.
hier der code für das formatieren des datums in einen geeigneten minuenden:
time_t zeit; zeit = time(0); struct tm * timeinfo; timeinfo = localtime(&zeit); day = timeinfo->tm_mday; mon = timeinfo->tm_mon+1; year = timeinfo->tm_year+1900; datum = year*10000 + mon*100 + day;
könnte mir evtl. noch wer den ersten abschnitt kommentieren?
das ist für mich noch kauderwelsch.gruß
Lukas
-
lukrass schrieb:
time_t zeit; //Variable für die Speicherung eines Zeit/Datumswertes zeit = time(0); //Aktuelle Zeit holen struct tm * timeinfo; //Zeiger auf Struktur für aufgesplittete Zeit/Datumsbestandteile timeinfo = localtime(&zeit); //Struktur mit den Werten der gerade //gelesenen aktuellen Zeit füllen und den //Zeiger darauf setzen day = timeinfo->tm_mday; mon = timeinfo->tm_mon+1; year = timeinfo->tm_year+1900; datum = year*10000 + mon*100 + day;
könnte mir evtl. noch wer den ersten abschnitt kommentieren?
Siehe auch:
http://www.cplusplus.com/reference/clibrary/ctime/
-
aaah, dankesehr!
visual c++ sollte noch smarter werden und die datentypen, die mit einer eingebundenen bibliothek erst dazukommen, auch direkt blau darstellen.
das würde sehr dem überblick dienen.ansonsten sollte ich mich wohl mal mit zeigern beschäftigen!
gibt es denn noch eine einfachere lösung oder ist das schon das optimum?
was meint ihr?
-
Mhm, einfacher ...?
Anders, zB wenn Du hier mal liest:
http://www.cplusplus.com/reference/clibrary/ctime/time_t/
siehst Du, dass man mit dem Datentyp time_t auch rechnen kann. Man könnte also den umgekehrten Weg gehen, das eingegebene Geburtsdatum in einen time_t - Wert umwandeln, die Berechnung mit den time_t Variablen machen, aus dem Ergebnis die tm - Struktur und da dann direkt das Alter entnehmen ...
Das hätte Dir die Notwendigkeit der Entdeckung des Algorithmus jahr mal 100000 + monat mal 100 + tag erspart, aber ob das nun einfacher ist, ist wohl eher Geschmackssache.
-
lukrass schrieb:
gibt es denn noch eine einfachere lösung oder ist das schon das optimum?
was meint ihr?Das ist eher Geschmacksfrage. Das ist eben die alte C-Bibliothek für Datum und Zeit. Daher musst du da mit Zeigern rumwerkeln. Und dies fällt dir ja anscheinend schwer.
Eine Datum- und Zeitbibliothek im C++-Stil ist im Standard nicht vorgesehen (die C-Bib ist in der Regel gut genug), aber die quasi-Standardbibliothek Boost bietet dies an. Ob dir als Anfänger ein durchgestyltes C++-Interface leichter fällt als ein paar einfache Zeigeroperationen musst du selber beurteilen:
http://www.boost.org/doc/libs/1_47_0/doc/html/date_time/examples.html#date_time.examples.days_alive