Welcher primitive Datentyp ist time_t? [duplicate]

Lesezeit: 3 Minuten

Ich kenne den Datentyp nicht time_t. Ist es ein Float-Double oder etwas anderes? Denn wenn ich es anzeigen möchte, brauche ich das entsprechende Tag dafür printf. Ich kann den Rest von dort aus für die Anzeige erledigen time_t aber ich muss den Datentyp kennen, der ihm entspricht.

  • Dies wurde hier bereits beantwortet: stackoverflow.com/questions/471248/…

    – Firas Assaad

    8. Mai 2010 um 1:18 Uhr

  • Für diejenigen, die hier suchen, wie man time_t druckt, gilt die gleiche Diskussion für clock_t und wurde hier durchgeführt.

    – Ciro Santilli OurBigBook.com

    5. Oktober 2013 um 8:08 Uhr


  • @FirasAssaad Diese Antwort gilt für Linux. Dieser Beitrag ist nicht betriebssystemspezifisch.

    – chux – Wiedereinsetzung von Monica

    30. März 2017 um 2:35 Uhr

Es ist plattformspezifisch. Sie können es jedoch in einen bekannten Typ umwandeln.

printf("%lld\n", (long long) time(NULL));

  • Das setzt voraus, dass die Plattform (lang lang) unterstützt. Gerade wenn dies nicht der Fall ist, müssen Sie wissen, dass time_t nur 32-Bit ist.

    – Ian Goldby

    15. August 2012 um 8:53 Uhr

  • Davon geht es auch aus long long groß genug ist, um den Wert zu halten. Soweit die Norm sagt time_t kann die Anzahl der Yoktosekunden seit der Ausstrahlung der ersten Monty-Python-Episode sein (wodurch sie größer als 64 Bit wird).

    – Himmel König

    26. Oktober 2016 um 7:08 Uhr

  • @skyking lügt nicht. Sie benötigen mindestens eine 111-Bit-Zahl, um einen solchen Wert zu speichern (ungefähr 1,5e33). Bis sie setzen long long long long In den Standard können Sie sich für die Zukunft vorbereiten, indem Sie alle Ihre speichern time_ts in a uint64_t[2].

    Benutzer1902824

    15. Februar 2018 um 23:28 Uhr

Leider ist es nicht vollständig tragbar. Es ist normalerweise integral, aber es kann sein jeder “Ganzzahl- oder Real-Floating-Typ”.

Benutzeravatar von user2483388
Benutzer2483388

Sie können die Funktion verwenden difftime. Es gibt die Differenz zwischen zwei gegebenen zurück time_t Werte, der Ausgabewert ist double (sehen difftime-Dokumentation).

time_t actual_time;
double actual_time_sec;
actual_time = time(0);
actual_time_sec = difftime(actual_time,0); 
printf("%g",actual_time_sec);

Sie könnten immer so etwas wie mktime verwenden, um eine bekannte Zeit (Mitternacht, letzte Nacht) zu erstellen, und difftime verwenden, um einen Zeitunterschied mit doppelter Genauigkeit zwischen den beiden zu erhalten. Für eine plattformunabhängige Lösung werden Sie nicht viel besser abschneiden, es sei denn, Sie gehen in die Details Ihrer Bibliotheken ein. Gemäß der C-Spezifikation ist die Definition von time_t implementierungsdefiniert (was bedeutet, dass jede Implementierung der Bibliothek sie nach Belieben definieren kann, solange sich Bibliotheksfunktionen mit ihrer Verwendung gemäß der Spezifikation verhalten.)

Davon abgesehen beträgt die Größe von time_t auf meinem Linux-Rechner 8 Bytes, was auf ein langes int oder ein Double hindeutet. So tat ich:

int main()
{
    for(;;)
    {
        printf ("%ld\n", time(NULL));
        printf ("%f\n", time(NULL));
        sleep(1);
    }
    return 0;
}

Die durch %ld angegebene Zeit wurde bei jedem Schritt um eins erhöht, und der Float gab jedes Mal 0,000 aus. Wenn Sie unbedingt printf verwenden möchten, um time_ts anzuzeigen, probieren Sie am besten Ihr eigenes Experiment aus und sehen Sie, wie es auf Ihrer Plattform und mit Ihrem Compiler funktioniert.

1410820cookie-checkWelcher primitive Datentyp ist time_t? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy