Datum als Timestamp
-
Dank euch beiden, das wird sicher helfen! Wenn ich es gleich rausbekomm werd ichs hier posten!
Gibt es eigentlich eine Möglichkeit nur eine einzelne Klasse zu inkludieren oder geht das nur über die h-Datei? Sonst würde ich nur CTime inkludieren und mein Problem wäre ja auch gelöst.
-
Du kannst nur komplette Header inkludieren, keine Ausschnitte daraus. (du könntest dir höchstens die Definition der Klasse CTime aus ihrem Header rauskopieren, aber ob das dann noch compiliert werden kann, steht auf einem anderen Blatt)
-
Hab versucht CTime rauszufrickeln aus der afx.h, aber das wird nix, lauter linker-Fehler. Aber ich höre immer, dass es kein Problem sei ATL/WTL mit MFC zu mischen, warum aber klappt es nicht bei mir?!? (und die, die es behaupten haben nur gesagt, dass es geht, aber nicht wie)
-
Wenn du Linker-Fehler bekommst, liegt das vermutlich daran, daß du die richtige Lib unterschlagen hast (im Header stehen nur die Methodendeklarationen, die zugehörigen Definitionen sucht sich der Linker dann zusammen).
(PS: Was die Zusammenarbeit von ATL und MFC angeht - damit kenne ich mich nicht aus)
-
Ich bekomme es einfach nicht hin. Wer mir ne Lösung bis 12 Uhr sagen kannst, die bei mir läuft bekommt direkt 10€ per paypal überwiesen. Immerhin noch besser als ein 10.000€ Projekt nicht bis Freitag fertig zu bekommen wegen so nem Scheiss :(.
-
Ich kann mich nur selber zitieren:
CStoll schrieb:
OK, dann hier ein Lösungsansatz:
- du nimmst dir einen 'struct tm' und füllst ihn mit den nötigen Werten
- du jagst diesen 'struct tm' durch mktime() - das Resultat kannst du dann als TimeStamp verwenden
(und wenn du willst, kannst du das ganze in eine Funktion packen, dann hast du in der Anwendung auch nur einen Einzeiler)
Oder als Grundgerüst:
#include <ctime> std::time_t Timestamp(...) { std::tm t; //fülle t mit Werten return mktime(t); }
-
CStoll: Danke. Hab auch noch was über google gefunden und bisher das zusammengewerkelt:
time_t CMainDlg::dateToTimestamp(int jahr, int monat, int tag, int stunde, int minute, int sekunde) { time_t time_as_sec; struct tm timestrct; timestrct.tm_year = jahr - 1900; // Jahr - 1900 timestrct.tm_mon = monat - 1; // Monat - 1; timestrct.tm_mday = tag; timestrct.tm_hour = stunde; timestrct.tm_min = minute; timestrct.tm_sec = sekunde; timestrct.tm_isdst = 0; time_as_sec = mktime(×trct); return time_as_sec; }
Das läuft soweit, allerdings muss noch die Zeitzone einfließen. Das geht wohl mit timegm, weiss aber noch nicht genau wie.
-
plizer schrieb:
Das läuft soweit, allerdings muss noch die Zeitzone einfließen.
Was meinst du mit einfließen, der User gibt doch schon die Zeit ein. Inwiefern fließt da noch eine Zeitzone mit ein ?
Weiß ja nicht genau was du meinst, aber als hilfe:
localtime() - macht dir aus deiner time_t zeit die Lokale Zeit.
gmtime() - macht dir aus deiner time_t zeit die GMT Zeit.Auf die GMT-Zeit kannst du ja wie du lustig bist aufaddieren bzw subtrahieren, je nach Zeitzone ...
-
@KasF: Du hast Recht! Die Zeitzone sollte mich in dem Fall garnicht interessieren. Danke!
-
Oh, mir fällt gerade auf, dass ich doch die Zeitzone beachten muss! Auch wenn ich exakt festlege welchen Tag, Stunde usw. Muss er ja wissen, wenn er den TImestamp seit 1970 liefern soll, für welche Zeitzone dieser Wert sein muss! Und je nach Zeitzone sind dies unterschiedliche Werte. Zumindestens kommt bei mir raus, dass es um eine Stunde falsch läuft. Bisher ziehe ich einfach eine Stunde ab. Aber das geht natürlich nach hinten, wenn man sich z.B. direkt am ersten Tag des Monats befindet oder noch besser der erste Tag des Jahres.
-
Die Stunde ist falsch, da du die Sommerzeit nicht gesetzt hast
timestrct.tm_isdst = 1;
-
oh cool
thx