Zum Inhalt springen

strptime, difftime, please help


silicon

Empfohlene Beiträge

Hallo,

ich bin silicon, mein erstes post hier.

seit tagen versuche ich über difftime die differenz von 2 zeiten auszuwerten, die als STRING schon vorhanden sind. (Über Sql_select etc. andere Geschichte).

Ich versuche diese Strings im Format von z.B 02.09.2003 in das benötigte zeitformat für difftime umzuwandeln.

das ganze spielt sich in folgender funktion ab (typ ist jetzt erstmal uninteressant)

int validate_date (char *datum, int typ)

{

char *s;

struct tm *sysdate,*carddate;

int day;

s = select_sysdate (30); /*funktioniert, kommt aus nem select woanders her*

strptime( datum, "%m.%d.%Y", &carddate );

strptime( s, "%m.%d.%Y", &sysdate );

day = difftime( carddate, sysdate);

return day;

}

Mag sein das int Day als Return nicht richtig ist, aber da kommt keine Fehlermeldung.

validate.c: In function `validate_date':

validate.c:213: warning: assignment from incompatible pointer type

validate.c:214: warning: passing arg 3 of `strptime' from incompatible pointer type

validate.c:216: warning: passing arg 3 of `strptime' from incompatible pointer type

validate.c:218: warning: passing arg 1 of `difftime' makes integer from pointer without a cast

validate.c:218: warning: passing arg 2 of `difftime' makes integer from pointer without a cast

Ist meine bisherige Fehlermeldung.

Sorry, ich spreche noramleweise nicht C und tu mir momentan etwas schwer...

cheers,

silicon

Link zu diesem Kommentar
Auf anderen Seiten teilen

Tach auch und Herzlich Willkommen :)

Du haettest vielleicht noch etwas ausfuehrlicher schreiben sollen, z.B. was du fuer nen Compiler benutzt und sowas.

Wenn ich mir das so anschau, dann wuerd ich erstmal meinen, dass es nix mit Windows zutun hat. (ich kann dann hier auch nur die meldungen interpretieren)

validate.c:218: warning: passing arg 1 of `difftime' makes integer from pointer without a cast

validate.c:218: warning: passing arg 2 of `difftime' makes integer from pointer without a cast

das sagt wohl nur aus, dass dein difftime() zwei integer Werte haben mag und nicht zwei Pointer so wie du sie uebergibst.

validate.c:214: warning: passing arg 3 of `strptime' from incompatible pointer type

validate.c:216: warning: passing arg 3 of `strptime' from incompatible pointer type

dabei rate ich dann mal, dass strptime als dritten Parameter nen entsprechenden Pointer verlangt...ich wuerde es also zuerst mal ohne das & vor carddate und sysdate probieren.

So.....hoffentlich hilfts dir ein wenig. Ich konnte hier nur Vermutungen anstellen, da ich ja ansich nur mit Windows arbeite und deine Funktionen gar nicht kenne :D

Goos

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ich arbeie unter Unix Solaris 9. Sorry, hätte ich vergessen. Hab hier nen GNU-Compiler laufen.

ist über man page time.h aufgeführt (indirekt).

das ist einfach krass.

so mein code sieht jetzt besser aus:

struct tm sysdate,carddate;

.

.

.

.

strptime( datum, "%m.%d.%Y", &carddate );

strptime( s, "%m.%d.%Y", &sysdate );

Das mache ich, weil strptime ja eine Funktion ist, die ohne die & nur den Wert von carddate etc. und nicht die tatsächliche Adressierung ändern würde. Oder?

Jetzt muss ich nur noch difftime soweit dazu bringen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von silicon

strptime( datum, "%m.%d.%Y", &carddate );

strptime( s, "%m.%d.%Y", &sysdate );

Das mache ich, weil strptime ja eine Funktion ist, die ohne die & nur den Wert von carddate etc. und nicht die tatsächliche Adressierung ändern würde. Oder?

Nene die aendert wohl nicht die Adresse, sondern den Wert, greift aber ueber die Adresse darauf zu.

Das difftime sollte nun aber auch wieder in der urspruenglichen Variante laufen (day = difftime( carddate, sysdate); ) da du ja nun keine Pionter mehr hast.

Goos

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, habs jetzt nochmal ohne pointer von tm laufen lassen:

difftime sieht so aus:

validate.c: In function `validate_date':

validate.c:217: incompatible type for argument 1 of `difftime'

validate.c:217: incompatible type for argument 2 of `difftime'

day = difftime( carddate, sysdate);

muss ich da irgendwie noch die structure tm mit reinbringen in das difftime???

:confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

@nic-power:

wenn du dir meine posts weiter oben angeschaut hättest, würdest du merken, dass ich 2 strings vorliegen habe, die ich versuche in ein kompatibles zeitformat für mein difftime umzuwandeln. ich will keine zeit neu generieren, mit mktime oder was auch immer.

:floet:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von silicon

@nic-power:

wenn du dir meine posts weiter oben angeschaut hättest, würdest du merken, dass ich 2 strings vorliegen habe, die ich versuche in ein kompatibles zeitformat für mein difftime umzuwandeln. ich will keine zeit neu generieren, mit mktime oder was auch immer.

:floet:

und wenn du dir die Dokumentationen zu den verschiedenen Befehlen angeschaut hättest, hättest du gemerkt das nic-power vollkommen recht hat.;)

difftime erwartet zwei Variablen vom Typ time_t, mit mktime kannst du deine Variablen vom Typ tm in den Typ time_t konvertieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Original geschrieben von silicon

@nic-power:

wenn du dir meine posts weiter oben angeschaut hättest, würdest du merken, dass ich 2 strings vorliegen habe, die ich versuche in ein kompatibles zeitformat für mein difftime umzuwandeln. ich will keine zeit neu generieren, mit mktime oder was auch immer.

:floet:

Hast Du ueberhaupt schon mal in die Manual-Pages zu den von Dir verwendeten Funktionen geschaut? Dann wuerde Dir auffallen, dass Du die falschen Datentypen verwendest. Um difftime() zu verwenden, musst Du die Daten vorher konvertieren (siehe oben und man-pages).

Nic

Link zu diesem Kommentar
Auf anderen Seiten teilen

So ich hab die Funktion mal komplett mit ein paar Kommentaren erstellt:


int validate_date (char *datum, int typ)

{

	char *s;

	struct tm sysdate,carddate;

	int day;


	s = select_sysdate (30); /*funktioniert, kommt aus nem select woanders her*

	//datumsstring (datum) in tm Struktur(carddate) speichern

	strptime( datum, "%m.%d.%Y", &carddate );

	//datumsstring (s) in tm struktur (sysdate) speichern

	strptime( s, "%m.%d.%Y", &sysdate );

	//carddate und sysdate in Sekunden umwandeln 

   //und die differenz   berechnen

	day = difftime( mktime(&carddate), mktime(&sysdate));

	return day;

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

so,

progrämmchen läuft soweit, aber ich krieg nur 0.00000 heraus.

(habe natürlich double day initialisiert, weil difftime ja einen double-wert zurückgibt.)

irgendwas mog der noch net.

muss ich eventuell noch " 00:00:00" an den string anhängen und dementsprechend strptime mit %M etc. erweitern?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Guybrush Threepwood



	//carddate und sysdate in Sekunden umwandeln 

   //und die differenz   berechnen

	day = difftime( mktime(&carddate), mktime(&sysdate));

	return day;

Hi,

Def: double difftime(time_t time1, time_t time0);

Rechnen tut difftime: time1 - time0

cardate < sysdate (Geh ich mal von aus:))

Ich würde die beiden Zeiten gegenainander tauschen!

Ansonst debug dein Programm und schau mal was mktime(carddate/sysdate) zurück gibt.

Gruß Pönk

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...