UNIX timestamp in Windows



  • :p und wie caste ich einen time_t nach char*?



  • (char*)t ...

    Glaube aber kaum dass dir das hilft. Was willst du wirklich?



  • Einen Timestamp, den ich aus einer Datei ausgelesen habe (habe ihn also als char*) mit dem momentanen vergleichen.



  • time_t now = time(NULL);
    char bla[10];
    strcpy(bla, (char*)now);
    MessageBox(NULL, bla, bla, MB_OKCANCEL);
    

    Hm, warum geht das denn nicht?

    n00b



  • Anmerkung: Der Unix-Timestamp zählt erst ab ein Uhr

    Gruß Jens



  • Original erstellt von <n00b>:
    *```
    strcpy(bla, (char
    )now);

    das ist ungefähr so wie im porzellanladen autofahren...
    wenn du einen int nach char* castet dann wird der wert des integer als pointer interpretiert und versucht darauf zuzugreiffen....

    ich denke mit:

    atoi(bla)==now
    sollte das gehen...
    aber ausserdem wenn du einfach strcpy(....); schreibst dann passiert garnichts weil du die strings zwar vergleichst aber garnichts damit machst... irgendwo muss da noch ein if hin oder so:

    time_t now = time(NULL);
    char bla[10];
    if(atoi(bla)==now)
       MessageBox(NULL, bla, bla, MB_OKCANCEL);
    

    geht aber wie gesagt auch nur wenns sich time_t implizit auf int casten lässt



  • Hm, und wie kopiere ich einen Timestamp denn nun in einen char*. Das muss doch irgendwie möglich sein. Ich möchte doch nur das aktuelle Datum in einem char* haben. Mehr nicht!



  • Unter der Voraussetzung, dass das gleiche System mit den gleichen Einstellungen den 'Timestamp' in seinem Spezialformat (das natürlich nicht festgelegt ist) in die Datei geschrieben hat, liest Du es einfach mit fgets, fgetc, oder sonstwas aus der Datei (man kann mit Standard-C keinen time_t in eine Datei schreiben, weil nicht bekannt ist, welcher Typ sich dahinter versteckt). Dann kannst Du den time_t von oben (siehe erstes Post von mir) zB mit ctime ebenfalls nach char* konvertieren und dann mit strcpy oder von Hand vergleichen. Damit tut man sich aber schwer Berechnungen durchzuführen. Für eine einfache Differenzbestimmung kann man difftime benutzten, das zwei time_ts verlang, in komplexeren Fällen nimmt man besser zwei struct tms und operiert auf diesen Daten.



  • Hm, okay, mit

    char *timenow;
    time_t now = time(NULL);
    timenow = ctime(&now);
    

    kann ich das Datum im Format "Sun Apr 20 ..." in eine Datei schreiben. Ich möchte jedoch den Timestamp selbst in die Datei schreiben (also die 10stellige Zahl). Wie geht das?

    Danke für eure Hilfe!



  • Überhaupt nicht schön. Man muss herausfinden ob time_t ein Kommatyp oder ein Ganzzahlentyp ist und dann entsprechend mit printf ausgeben:

    void print_time_t(time_t time, FILE *f)
    {
        long double d;
        time_t t;
    
        d = 1.5;
        t = d;
        if ((long double)t == d) { /* is long double */
            fprintf(f, "%Lg", (long double)time);
        } else {                                    /* long long */
            fprintf(f, "%ll", (long long)time);
        }
    }
    

    ;). Der normale Ansatz ist es aber, so etwas festzulegen (Makefile, config.h ...) oder direkt die Finger von solchem Zeug zu lassen.



  • pfui 🙄


Anmelden zum Antworten