UTC Zeit ist Float?????
-
Hi,
ich soll für Objekte (Auto, Zug, Fußgänger,...) Kollisionen berechnen.
Jedes Object hat eine Zeitangabe vom Typ "float".
z.B.: Cars(0)->point(0)->utc_time. Eine Ausgabe mit printf(" Zeit Auto: %f " , Cars(0)->point(0)->utc_time ); ergibt: 40597.960938. Diese zeit soll in eine GMT Zeit umgewandelt werden. Wenn ich ein Datum bekomme, dann hab ich dafür eine Lösung:double convertEpocTimeUTCGMT(const char* DateTime, bool switchToStandardTime){ struct tm dt = {0,0,0,0,0,0,0,0,0,0,0}; char* w1; w1= (char*)malloc( strlen(DateTime)+1); w1 = strcpy( w1, DateTime); char* pGLobalDateTokenList = strtok(w1, DateTimeDelimiter); char* pGlobalTimeTokenList = strtok(NULL, DateTimeDelimiter); if(strlen(DateTime) < 10) return 0; if(pGLobalDateTokenList){ char* pDateTokenList = strtok(pGLobalDateTokenList, "-"); if(pDateTokenList){ dt.tm_year = atoi(pDateTokenList) - 1900; pDateTokenList = strtok(NULL, "-"); dt.tm_mon = atoi(pDateTokenList) -1; pDateTokenList = strtok(NULL, "-"); dt.tm_mday = atoi(pDateTokenList); } } if(pGlobalTimeTokenList){ char* pTimeTokenList = strtok(pGlobalTimeTokenList, ":"); if(pTimeTokenList){ if(switchToStandardTime == false) dt.tm_hour = atoi(pTimeTokenList)+1; //time change! switch to summertime else dt.tm_hour = atoi(pTimeTokenList); //time change! return to standard time pTimeTokenList = strtok(NULL, ":"); dt.tm_min = atoi(pTimeTokenList); pTimeTokenList = strtok(NULL, ":"); dt.tm_sec = atoi(pTimeTokenList); } } return (double)mktime(&dt); //UTC / GMT }Wie löse ich das mit dem Float?
Gruß
Franky
-
Falsches Forum. Das ist eher C-Code.
-
Tachyon schrieb:
Falsches Forum. Das ist eher C-Code.
Auch in C würde das niemand so machen. Schließlich gibt's das schon in der Standardbibliothek.
@Threadersteller:
- Guck dir mal time.h an!
- Was willst du eigentlich? Ehrlich gesagt, weiß ich gar nicht was du vor hast, das ist alles ein bisschen wirr:
- Was hat das mit der Kollisionsberechnung zu tun?
- Wieso willst du UTC in GMT umrechnen? Die beiden unterscheiden sich doch nur um Sekundenbruchteile
- Was hat diese Umrechnung mit deinem Code zu tun? Dein Code bezieht sich auf die Umwandlung von Zeichenketten in eine numerische Zeitangabe.
-
Hi,
ich bekommme einen Wert (Zahl) vom Typ float. Diesen will ich in ein gültiges Datum formatieren. Weil "40597.960938" irgendwie nicht so aussieht wie:
Jahr, Tag, Monat, ..Für das Datumsformat (in dem Codebeispiel) wenn es das schon in einer Standardbibliothek gibt, welches ist es denn? Weil dann könnte ich den Code ja vereinfachen.
Gruß
Franky
-
FrankTheFox schrieb:
Für das Datumsformat (in dem Codebeispiel) wenn es das schon in einer Standardbibliothek gibt, welches ist es denn?
Das kannst du dir aussuchen:
http://www.cplusplus.com/reference/clibrary/ctime/strftime/
Oder auch ein Standardformatierung benutzen:
http://www.cplusplus.com/reference/clibrary/ctime/asctime/
Lies dir doch einfach mal die Referenz zu time.h durch! Die ist nicht lang.
-
Hi,
OK! Stimmt der Beispiel-Code ist nicht durchdacht. Ich habe den etwas umgeschrieben....
long Timestamp(char* CurrentTime) { std::string str = CurrentTime; time_t t; struct tm * DateTime; t = time(NULL); DateTime = localtime(&t); if(str.length() == 8) { DateTime->tm_hour = atoi(str.substr(0,2).c_str()); DateTime->tm_min = atoi(str.substr(3,2).c_str()); DateTime->tm_sec = atoi(str.substr(6,2).c_str()); return (long)mktime(DateTime); } else if(str.length() == 24) { DateTime->tm_year = atoi(str.substr(0,4).c_str()) - 1900; DateTime->tm_mon = atoi( str.substr(5,2).c_str()) -1; DateTime->tm_mday = atoi(str.substr(8,2).c_str()); DateTime->tm_hour = atoi(str.substr(11,2).c_str()); DateTime->tm_min = atoi(str.substr(14,2).c_str()); DateTime->tm_sec = atoi(str.substr(17,2).c_str()); return (long)mktime(DateTime); } else return -1; }Geht es beim Code noch besser? Oder ist das noch genauso schlecht?
Ich habe
a) hh
ss als Zeit und (nehme das aktuelle Datum)
b) YYYY-MM-TThh
ss.000Z (bsp.:"2008-09-26T01:51:42.000Z")und erhalte richtiger Ergebnisse.
nun möchte ich einen FLoat -> HH:MM:SS. Ich weiß nicht wie ich anfangen soll?
Gruß
Franky
-
Hi,
also nun mein Lösungansatz:
long Timestamp(float CurrentTime) { time_t t; struct tm * DateTime; int hour, secs, minutes; int intTimeValue = (int) CurrentTime; hour = intTimeValue / 3600; minutes = (intTimeValue - (intTimeValue / 3600) * 3600 ) / 60; secs = intTimeValue % 60; printf(">>>> %02i %02i %02i", hour, minutes, secs); t = time(NULL); DateTime = localtime(&t); DateTime->tm_hour = hour; DateTime->tm_min = minutes; DateTime->tm_sec = secs; return (long)mktime(DateTime); }Ich denke wenn die Funktion int zurück gibt reicht das auch um den Timestamp aufzunehmen....
Und keine Kommentare?????
Gruß
Franky