Convert date zu unix-timestamp in c++
Als einige websites, konvertieren Sie diese unix-Zeitstempel sagen, den Stempel der
2013/05/07 05:01:00 (yyyy/mm/dd, hh:mm:ss) is 1367902860.
Die Art, wie ich es in C++, der Stempel unterscheidet sich von dem Datum.
Hier ist der code:
time_t rawtime;
struct tm * timeinfo;
int year=2013, month=5, day=7, hour = 5, min = 1, sec = 0;
/* get current timeinfo: */
time ( &rawtime ); //or: rawtime = time(0);
/* convert to struct: */
timeinfo = localtime ( &rawtime );
/* now modify the timeinfo to the given date: */
timeinfo->tm_year = year - 1900;
timeinfo->tm_mon = month - 1; //months since January - [0,11]
timeinfo->tm_mday = day; //day of the month - [1,31]
timeinfo->tm_hour = hour; //hours since midnight - [0,23]
timeinfo->tm_min = min; //minutes after the hour - [0,59]
timeinfo->tm_sec = sec; //seconds after the minute - [0,59]
/* call mktime: create unix time stamp from timeinfo struct */
date = mktime ( timeinfo );
printf ("Until the given date, since 1970/01/01 %i seconds have passed.\n", date);
Den daraus resultierenden Zeit-Stempel wird
1367899260, but not 1367902860.
Was ist hier das problem? Auch wenn ich auf h-1 oder h+1, nicht entspricht. EDIT: Na ja, wenn ich um 1 Stunde, dann funktioniert es. auch vorher Hinzugefügt 1 bis Minuten.
InformationsquelleAutor user2366975 | 2014-02-10
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie timegm() anstelle von mktime(), und das ist alles. Da mktime ist für localtime und timegm zur UTC/GMT Zeit.
Konvertierung Zwischen Ortszeit (Lokale Zeit und GMT/UTC im C/C++
Es ist
mktime()
in C++ STL, ist es?!Ja:
mktime
,gmtime
,localtime
,ctime
, ... Hüten Sie sich vortimegm
vs.gmtime
.InformationsquelleAutor José María
Haben Sie die Sommerzeit, wenn Sie aus? Der tm::tm_isdst parameter ist ein flag für Sommerzeit. Diese wird gefüllt durch die localtime anrufen basierend auf, wo Sie sind und die Zeit des Jahres und Sie tun es nicht zurücksetzen. Also selbst wenn Sie und die Webseite sind mit der gleichen Zeit, wenn Sie die Sommerzeit-flag gesetzt und die web-Seite nicht, dann werden Sie am Ende Verschieden von 1 Stunde.
Beachten Sie nicht wirklich brauchen, die localtime nennen. Sie können einfach füllen Sie in alle Teile manuell, weil tm::tm_wday und tm::tm_yday werden ignoriert mktime. Check-out http://www.cplusplus.com/reference/ctime/tm/ und http://www.cplusplus.com/reference/ctime/mktime/
InformationsquelleAutor Phil Rosenberg
Nicht mit einem Zeiger auf localtime. Speichern Sie den tatsächlichen Wert
Wissen Sie nicht, was Sie sonst noch über den Zeiger, die localtime ist die Rücksendung. mktime vielleicht sein könnte, es zu benutzen.
InformationsquelleAutor cup
Sieht es aus wie die website ist, vorausgesetzt, die Zeit ist in der UTC-Zeitzone, und Ihr computer eingerichtet ist, um einige andere Zeitzone.
Können Sie anrufen
gmtime
eher alslocaltime
zu UTC-Zeit für das, aber ich habe gerade bemerkt, dass Sie nicht wirklich mitlocaltime
nichts zu tun, außer einen Zeiger auf einetm
. Sie wären besser dran deklarieren einer lokalentm
; die vonlocaltime
können wiederverwendet werden, wenn Sie ein time Bibliothek-Funktion.Leider gibt es keine standard-Variante der
mktime
mit UTC. Wenn Sie möchten, UTC, sind Ihre Optionen:setenv("TZ", "", 1);
. Beachten Sie, dass dies wirkt sich auf das ganze Programm, so kann umständlich sein, wenn Sie auch need to deal with local time.timeinfo = gmtime ( &rawtime);
und das Ergebnis bleibt das gleiche.Oh ja,
mktime
wird immer noch davon ausgehen, lokale Zeit und nicht UTC-version.InformationsquelleAutor Mike Seymour
mktime()
wandelt lokalen Kalender-Zeit zu einer Zeit, da die Epoche alstime_t
Objekt, so Ihr Ergebnis anders sein wird von der website, wenn Sie sich in einer anderen Zeitzone. Die website nimmt2013/05/07 05:01:00
als UTC-Zeit. Der gleiche code auf meinem Rechner hat ein Ergebnis von1367874060
, das ist 8 Stunden entfernt von der website Wert. Ich bin in UTC+8:00 Zeit-zone, somktime()
auf meinem Rechner dauert die Eingabe2013/05/07 05:01:00
als UTC+8:00 Uhr Zeit, so dass der Unterschied.PS:
localtime()
gibt einen Zeiger auf eine statische internestruct tm
Objekt. Die Struktur kann geteilt werden zwischengmtime()
,localtime()
, undctime()
ist, und kann überschrieben werden bei jedem Aufruf. So ist es eine bessere Praxis, um Ihre eigene lokale Kopie einerstruct tm
Objekt.InformationsquelleAutor neverhoodboy