Datum als Timestamp
-
akari schrieb:
Hallo
Tip : Die meisten Seiten der MSDN sind auf englisch, grad die Dokus zu C/C++ und WinAPI. Die meistens deutschen Seiten hingegen sind nur in den Foren und Fehlerbeschreibungen.
Von einem deutschen Windows aber wird bei der Suche die deutsche Sprache vorgegeben. Du must also vorher die Suche in der Combobox rechts die Sprache auf englisch umstellen, dann findest du auch viel mehr.bis bald
akariDanke für den Tipp. Bin schon immer auf MSDN.com gegangen, aber der erkennt ja automatisch und stellt auf deutsch um.
-
Ich habe mittlerweile wieder andere Klassen gefunden. Aber es wäre am besten an einen time_t Wert zu kommen. Wo bekomme ich Infos über <ctime>?
Das einzige was ich in der MSDN finde ist:
<ctime>
namespace std {#include <time.h> };
Include the standard header <ctime> to effectively include the standard header <time.h> within the std namespace.
-
Entweder du gehst weiter zu <time.h> (<ctime> ist die C++ Version des alten C-Headers) oder du schaust dich mal in den Man-Pages um nach man: mktime() und Familie.
-
Ich habe mir jetzt CTime, mktime, SYSTEMTIME, FILETIME, DateTime, CDateTime angeschaut und die Übersicht verabschiedet sich immer mehr! In einer Stunde bin ich noch blöder als vorher... Und was ich nicht verstehe, im Grunde ist das doch ein EINZEILER!
(s.o.)
-
plizer schrieb:
Und was ich nicht verstehe, im Grunde ist das doch ein EINZEILER!
(s.o.)
Nein, das sieht nur aus wie ein Einzeiler, weil die gesamte Logik in verschiedenen Methoden verteilt ist
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)
-
Vielleicht hilft Dir das hier
-
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