Seite 1 von 1

mktime gibt komisches datum zurück

Verfasst: 29. Okt 2011 22:08
von pcAlko
Hallo community!

Ich habe da ein ganz komisches Problem!

habe folgenden code probiert

Code: Alles auswählen

		time_t acttime;
		struct tm* ttime;

		time(&acttime);
		cout << asctime&#40;localtime&#40;&acttime&#41;&#41;;
		ttime= localtime&#40;&acttime&#41;;
		ttime->tm_sec= 0;
		ttime->tm_min= 0;
		ttime->tm_hour= 0;
		ttime->tm_mday+= 2;
		acttime= mktime&#40;ttime&#41;;
		cout << asctime&#40;localtime&#40;&acttime&#41;&#41; << endl;
meine Ausgabe ist nun
  • Sat Oct 29 23:00:59 2011
    Sun Oct 30 23:00:00 2011
wieso hat er mir da jetzt eine Stunde zuwenig berechnet?
wenn ich nur einen Tag aufrechne funktionierts

*edit*
das hängt jetzt aber nicht davon ab dass die Ausgangszeit auch 23:00 Uhr war
hatte dieses Phänomen auch zuvor um 9:00

*edit2*
heute Vormittag habe ich es nochmoals probiert
und die Ausgabe war richtig
  • Sun Oct 30 10:43:22 2011
    Tue Nov 1 00:00:00 2011
ich muss dass jetzt auf längere Zeit beobachten
irgendwas ist da konfus
******************
Linux ist ja open source
was muss ich installieren damit ich diese Funktion mktime debuggen kann?
habe ein Kubuntu 10.04
sind diese time.c sourcen nicht in der glibc library?
oder muss ich einen ganzen Kernel mit sourcen installieren?
******************

kann mir da jemand helfen!?
Bitte, Danke
8) pcAlko

Verfasst: 30. Okt 2011 11:28
von Janka
Du hast das Feld ttime->tm_isdst nicht auf einen negativen Wert gesetzt. Das müsstest du aber, wenn er bei mktime() automatisch die Sommerzeit der Locale beachten soll. Ein fester Wert von 0 legt ewige Winterzeit fest, ein positiver Wert ewige Sommerzeit. Vemutlich steht da also zufällig Null drin, weswegen es jetzt (in Winterzeit) korrekt funktioniert.

$ man mktime

Janka

Verfasst: 30. Okt 2011 16:16
von pcAlko
na super *ironie*
das ärgert mich jetzt schon so lange dass ich es inzwischen schon mal aufgegeben hatte
und jetzt wieder in angriff genommen habe.

für tm_isdst steht ja in der Doku dass das die "daylight saving time" ist.
ich hatte das immer mit Tageslicht übersetzt
und dachte mir dass ich damit auf das 12 Stunden Format umschalten kann :oops:

Danke Janka
wenn wir Dich nicht hätten ...
8) pcAlko

Verfasst: 31. Okt 2011 9:54
von Janka
Ich guck auch nur in die Doku. Related: http://ars.userfriendly.org/cartoons/?id=19990216

Janka