Rechnen mit dem Datum
-
Hallöle, ich versuche meinem Sohn etwas zu helfen. Er benutzt in der Schule Borland C++ V 5.02 zum lernen usw. Ich bin auch etwas fit aber nur mit MS ASP.NET mehr Visual Basic.
Jetzt meine Frage:
Ich möchte einfach das aktuelle Datum abfragen und in ein Array schreiben als string, das habe ich erfolgreich absolviert.
Sicherlich zur Belustigung des Forumstime_t aktdatum= time(0); struct tm *ptm= localtime(&aktdatum); sprintf(Datum,"%02i.%02i.%04i", (int)ptm->tm_mday, (int)ptm->tm_mon+1, (int)ptm->tm_year+1900);
Jetzt soll aber das aktuelle Datum erhöht werden um x Tage und hier liegt der Hase im Pfeffer, ich werde noch halb blöde im Kopf weil ich das nicht hinbekomme
?
Hat jemand eine idee was ich machen kann? Ideal wäre es als Funktion.
Sinn dieser Aktion ist ein mehrdimensionales Array x,0 ist das datum und x,1 -x,8 sind freie Kapazitäten zu diesen Tag.Ich bin für alles dankbar bis später
-
Grundsätzlich löst du das so:
[cpp]#include <time.h>
#include <stdio.h>int main(void)
{
char datum[11];
struct tm *ptm;
time_t aktdatum;aktdatum = time (NULL);
aktdatum += 9 / Tage /
* 24 / Stunden/Tag /
* 60 / Minuten/Stunde /
* 60; / Sekunden/Minute /
ptm = localtime (&aktdatum);
sprintf(datum,"%02i.%02i.%04i",
(int) ptm->tm_mday,
(int) ptm->tm_mon + 1,
(int) ptm->tm_year + 1900);
return (0);
}[/cpp]Moritz
-
hallo Moritz,
danke aber leider nicht das richtig
.
Ich habe folgende Idee:aktuelles Datum ermitteln ->aktDatum
neuDatum = aktDatum + Tage
Es soll folgendes realisiert werden:
Baue ein Array beginnend von heute und 300 Tage in die Zukunft. und fülle den rest.Schönen Abend noch
-
MSBenny schrieb:
danke aber leider nicht das richtig
.
Ich habe folgende Idee:aktuelles Datum ermitteln ->aktDatum
neuDatum = aktDatum + Tage
Es soll folgendes realisiert werden:
Baue ein Array beginnend von heute und 300 Tage in die Zukunft. und fülle den rest.Dafür kannst du die Methode durchaus anwenden. Z.B. so:
typedef struct _tag_date { unsigned char Day; unsigned char Month; unsigned short Year; } date_t; date_t days[300]; void filldays (void) { struct tm *ptm; time_t date_cur; time_t date_add = 24 * 60 * 60; /* ein Tag */ date_t* cur; date_t* last; date_cur = time (NULL); for (cur = days, last = days + 300; cur < last; ++cur) { ptm = localtime (&date_cur); date_cur += date_add; cur->Day = (unsigned char) ptm->tm_mday; cur->Month = (unsigned char) ptm->tm_mon + 1; cur->Year = (unsigned short) ptm->tm_year + 1900; } }
Moritz
-
Hallo Moritz,
danke für die Info, es klappt einwandfrei, habe es etwas umgestrickt und jetzt läuft die ganze Sache!
Da habe ich schon wieder das nächste Problem, also C++ empfinde ich etwas, warum also wenn schon Sachen die in der Hilfe hinterlegt sind nicht klappen, was soll das.
Also Der Anwender gibt das datum ein Tag, Monat, Jahr. ich will das prüfen ob es richtig ist, mit der Funktion mktime.
Das schlimmste ist nur, ich bekomme nie einen Fehler weil diese beschiss.. Funktion gnadenlos alles umwandelt.
Beispiel Tag = 33 Monat = 5 Jahr = 2005 lt. Help sollte mktime -1 zurückgeben, gibt sie aber nicht, weil es wird umgewandelt zu 02.06.2005.#include <iostream.h> #include <fstream.h> #include <stdlib.h> #include <time.h> #include <stdio.h> int main(void) { time_t t1; int tag,monat,jahr; tag = 33; monat = 5; jahr = 2005; int aa,bb,cc; struct tm Datumtest; /* load the time_check structure with the data */ Datumtest.tm_year = jahr - 1900; Datumtest.tm_mon = monat - 1; Datumtest.tm_mday = tag; Datumtest.tm_hour = 0; Datumtest.tm_min = 0; Datumtest.tm_sec = 1; Datumtest.tm_isdst = -1; t1 = mktime(&Datumtest); aa = (Datumtest.tm_year-1900); cout<<Datumtest.tm_mday<<"."<<(Datumtest.tm_mon+1)<<"."<<(Datumtest.tm_year+1900)<<endl; cout<<mktime(&Datumtest)<<endl; return 0; }
Ausgabe
2.6.2005
1117663201
Ziel der Übung ist prüfen der Eingabe 1. Datum richtig und 2. Datum > heute//Test ist Datum groesser Heute int DatumDiff(int vtag,int vmonat,int vjahr) { time_t Datumakt1=time (NULL); struct tm Difftime; double diff; Difftime.tm_year = vjahr - 1900; Difftime.tm_mon = vmonat - 1; Difftime.tm_mday = vtag; Difftime.tm_hour = 0; Difftime.tm_min = 0; Difftime.tm_sec = 1; Difftime.tm_isdst = -1; diff = difftime(mktime(&Difftime),Datumakt1); return diff; }
Bin für jede Idee dankbar.
Ganz ehrlich, ich denke manchmal C++ Version 5.02 und MS Windows XP SP 2 laufen nicht was man da so erlebt
Also freue mich über jede Antwort.
-
MSBenny schrieb:
Da habe ich schon wieder das nächste Problem, also C++ empfinde ich etwas
, warum also wenn schon Sachen die in der Hilfe hinterlegt sind nicht klappen, was soll das.
Redest du von C++ oder von einem Compiler?
MSBenny schrieb:
Also Der Anwender gibt das datum ein Tag, Monat, Jahr. ich will das prüfen ob es richtig ist, mit der Funktion mktime.
Das schlimmste ist nur, ich bekomme nie einen Fehler weil diese beschiss.. Funktion gnadenlos alles umwandelt.
Beispiel Tag = 33 Monat = 5 Jahr = 2005 lt. Help sollte mktime -1 zurückgeben, gibt sie aber nicht, weil es wird umgewandelt zu 02.06.2005.Für diesen Zweck hat Volkard hier eine ganz nützliche Funktion gepostet, wenn auch in einem anderen Kontext.
MSBenny schrieb:
#include <iostream.h> #include <fstream.h> #include <stdlib.h> #include <time.h> #include <stdio.h>
Das entspricht nicht dem aktuellen C++-Standard; verwende
statt
iostream.h
fstream.h
stdlib.h
time.h
stdio.hbesser
iostream
fstream
cstdlib
ctime
cstdiound schreibe dann
using namespace std;
hinter die #include-Direktiven.
MSBenny schrieb:
Ganz ehrlich, ich denke manchmal C++ Version 5.02 und MS Windows XP SP 2 laufen nicht was man da so erlebt
C++ Version 5.02? Du meinst, Version 5.02 deines C++-Compilers? Wenn du mit diesem Probleme hast, solltest du ihn eventuell einmal auf den neuesten Stand bringen; einfach mal rechts oben im Forum auf "Compiler" klicken.
Moritz