Datumsvergleich

hey!
ich hab da mal ne frage…
im mom bin ich dabei ein datumsvergleich in vc++ als dll zu programieren.
allerdings muss ich die daten als strings übergeben. dabei ist das min bzw max datum allerdings „verschlüsselt“ in datum1 bzw datum2 zu finden, also zb XTXTX-XMXMXX-JJXXJJ.
im grunde genommen müsste ich somit das aktuelle datum, was aus den string Tag, Monat, Jahr, zusammen „addieren“ und dann die einzelnen datumsstellen aus datum1 bzw datum 2 auch zusammen „addieren“ und vergleichen… die frage ist nur wie?

int abfrage( char \* tag, char \* Monat, char \* Jahr, char \* datum1, char \* datum2) 

vielen dank im vorraus

Hallo Soumi !

Den vergleich von zwei Datumswerten macht man am besten über die ‚Julian Day Number‘: Da wird jedem Tag eine fortlaufende Nummer zugeordnet, zum vergleichen von zwei Datumswerten braucht man dann nur die entsprechenden ‚Julian Day Numbers‘ vergleichen.
Dieses Verfahren hat den weiteren Vorteil dass man damit nicht nur die Differenz an Tagen berechnen kann sondern auch leicht Datumswerte addieren etc. kann:

int GetMaxDayOfMonth(int p\_iYear, int p\_iMonth)
{
 int iMaxDay;

 iMaxDay = 0;

 if (p\_iYear == 0)
 return 0;
 if ((p\_iMonth 12))
 return 0;
 iMaxDay = 31;
 if (p\_iMonth 12))
 return false;
 if ((p\_iDay GetMaxDayOfMonth(p\_iYear, p\_iMonth)))
 return false;

 return true;
}

// GetJulianDayNumberFromDate(): Returns: 0: Ungueltiges Datum oder Datum war 

mfg
Christof

Danke Christof für deine ausführliche antwort,
nur wie bekomme ich konkret nun aus der verschlüsselung, die als „char *“ übergeben werden, nun wieder als normale integer zahlen zusammen?

Also sprich von
XTXXT-XMXXMX-JJXJXJ
zu
tag = TT; monat= MM; jahr = JJJJ;

im grunde genommen reicht es mir ja zu wissen, wie ich nun ein zeigerelemt zu einem vernünftigen int konvertiere

über atoi() klappt es nicht ( er meint er könnte char * nicht zu char konvertieren)
und über tag=int(datum[1])*10 + int(datum[4]) wills auch nicht gehen, da kriege ich nur komische zahlen raus…

vielen dank schon im vorraus!

ein verzweifelter
soumi

über atoi() klappt es nicht ( er meint er könnte char * nicht
zu char konvertieren)

Hi Suomi.
Bei dieser Fehlermeldung frage ich mich ob du den Zeiger dereferenziert hast?
atoi ist eigentlich die richtige Funktion dafür.
Gruß
re-G

ne, anscheinend nicht,da ich auch nicht weiß, wie das geht!

Wenn ich dich richtig verstanden habe, dann liegen die Zahlen als ASCII-Zeichen vor.
Du könntest einfach tag=int(datum[1] -0x30 )*10 + int(datum[4] -0x30 ) rechnen.
Ich denke das würde dir das richtige Ergebnis liefern.
0x30 ist der ASCCI-Code für 0.
http://www.torsten-horn.de/techdocs/ascii.htm
Ich hoffe mal das hilft
Gruß
re-G

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

nochmal die richtige adresse :smile:
http://www.torsten-horn.de/techdocs/ascii.htm

Wenn ich dich richtig verstanden habe, dann liegen die Zahlen
als ASCII-Zeichen vor.
Du könntest einfach
tag=int(datum[1] -0x30 )*10 +
int(datum[4] -0x30 ) rechnen.
Ich denke das würde dir das richtige Ergebnis liefern.
0x30 ist der ASCCI-Code für 0.
http://www.torsten-horn.de/techdocs/ascii.htm
Ich hoffe mal das hilft

alternativ ist mir grad noch eingefallen:

char pcTag[2];
int iTag;
pcTag[0] = datum1[1];
pcTag[1] = datum1[4];
iTag = atoi(pcTag);

sollte auch gehen, und ist einfacher zu lesen :wink:

Hallo re-G !

Noch besser:

char pcTag[3];
int iTag;
pcTag[0] = datum1[1];
pcTag[1] = datum1[4];
pcTag[2] = ‚\0‘;
iTag = atoi(pcTag);

:wink:
Christof

P.W.:
Two strings walk into a bar.
The first string says to the bartender: „Bartender, I’ll have a beer^%u.5n§smr$x5@q@t?*&4(ru!]2[sACC~*'´/=.“
The second string says: „Pardon my friend, he isn’t NULL-terminated.“

P.W.:
Two strings walk into a bar.
The first string says to the bartender: „Bartender, I’ll have
a beer^%u.5n§smr$x5@q@t?*&4(ru!]2[sACC~*'´/=.“
The second string says: „Pardon my friend, he isn’t
NULL-terminated.“

X) doh!
Hast recht.
QD ist nie eine gute Lösung.
Gruß