Stunden in das Datum konvertieren



  • koschka schrieb:

    Wie kann ich das machen?

    Erstmal gucken ob deine Sprache/Library sowas schon hat. In .NET kannst du bspw. entweder eine DateTime und eine TimeSpan addieren, oder AddHours auf eine DateTime aufrufen.



  • time_t rawtime;
    struct tm * timeinfo;

    time ( &rawtime );
    timeinfo = localtime ( &rawtime );
    timeinfo->tm_hours = timeinfo->tm_hours + hours;

    und das ins Datum konvertieren?



  • so wird falsches Datum geliefert. Ich glaube man muss die Stunden in Tage und Jahre...umrechnen
    timeinfo->tm_hours =timeinfo->tm_hours+hours; //hours = 7414 zum Beispiel
    so ist das falsch...



  • kann mir jemand helfen, wie man das macht?



  • Schau Dir time.h an.
    Un hier gibts die Referenzen zu den Bibliotheken:
    http://www.cplusplus.com/reference/



  • Ach ja und demnächst mitteilen welche Sprache/Compiler für welches BS Du nutzt und dann auch etwas Codefutter.



  • Du kannst auch in Sekunden rechnen. Dafür muss man allerdings wissen, wieviel Sekunden eine Stunde hat.



  • das ist mein code bisher...ich kriege es immer coch nicht richtiges Datum zu zeigen..Vorschläge?

    std::wstring expiryDate;
    	hours;
    
    	time_t rawtime;
    	wchar_t buf[15];
    	struct tm * timeinfo;
    
    	time ( &rawtime );
    	timeinfo = localtime ( &rawtime );
    	timeinfo->tm_hour = timeinfo->tm_hour+hours;
    
    	swprintf_s(buf,15,L"%04i%-02i%-02i",
    	(uint8_t)timeinfo->tm_year+1900,
    	(uint8_t)timeinfo->tm_mon+1,
    	(uint8_t)timeinfo->tm_mday
    	);
    
    	std::wstring expiryDate(buf);
    
    	return expiryDate;
    


  • Thou Shalt Know Your Headers!

    time.h

    Und dann kannst Du Deine Gesumse vergessen.



  • DirkB schrieb:

    Du kannst auch in Sekunden rechnen. Dafür muss man allerdings wissen, wieviel Sekunden eine Stunde hat.

    Guck nach was time() zurückgibt Tipp: hat was mit Sekunden und 1970 zu tun



  • Reicht es eigentlich, eine struct tm der aktuellen Zeit zu nehmen, was auf tm_hours zu addieren und dann mktime darauf aufzurufen, auf dass er die Zeit wieder „normalisiert“?

    The object pointed by timeptr is modified, setting the tm_wday and tm_yday to their appropiate values, and modifying the other members as necessary to values within the normal range representing the specified time.

    Das kann jetzt irgendwie alles heißen. Im Standard steht es leider auch nicht genauer 😕



  • ich habe mit struct probiert, es geht nicht...

    wchar_t buf[15];
    	time_t rawtime;
    	struct tm * timeinfo;
    	rawtime = time(0);
    	rawtime = rawtime / 3600 + hours;
    
    	timeinfo = localtime ( &rawtime );
    
    	swprintf_s(buf,15,L"%04i-%02i-%02i",
    	(uint8_t)timeinfo->tm_year+1900,
    	(uint8_t)timeinfo->tm_mon+1,
    	(uint8_t)timeinfo->tm_mday
    	);
    
    	std::wstring expiryDate(buf);
    
    	return expiryDate;
    


  • Bashar, ich sag es mal so, mktime wäre einen Versuch wert.

    Wenn man allerdings stur weiter in die Sackgasse läuft ...
    Eine ziemlich ignorante Nummer!



  • so habe ich gelöst

    wchar_t buf[15];
    	time_t rawtime;
    	struct tm * timeinfo;
    
    	rawtime = time(0);
    
    	timeinfo = localtime ( &rawtime );
    	timeinfo->tm_hour += hours;
    
    	mktime(timeinfo);
    
    	swprintf_s(buf,15,L"%04i-%02i-%02i",
    	(uint8_t)timeinfo->tm_year+1900,
    	(uint8_t)timeinfo->tm_mon+1,
    	(uint8_t)timeinfo->tm_mday
    	);
    
    	std::wstring expiryDate(buf);
    
    	return expiryDate;
    

    danke an den Vorschlag mit mktime



  • Vielleicht gibst Du einer der untenstehenden Funktionen eine kleine Chance:

    size_t strftime(
       char *strDest,
       size_t maxsize,
       const char *format,
       const struct tm *timeptr 
    );
    
    size_t wcsftime(
       wchar_t *strDest,
       size_t maxsize,
       const wchar_t *format,
       const struct tm *timeptr 
    );
    


  • die Funktion macht fast dasselbe, viel Vorteil sehe ich bei ihr nicht.


Anmelden zum Antworten