C – Konvertiere time_t in einen String mit dem Format YYYY-MM-DD HH:MM:SS

Lesezeit: 2 Minuten

Benutzeravatar von dmessf
dmessf

Gibt es eine Möglichkeit, eine umzuwandeln time_t zu einem std::string mit dem format JJJJ-MM-TT HH:MM:SS automatisch, während der Code portabel bleibt?

Verwenden localtime die umzuwandeln time_t zu einem struct tm. Sie können verwenden strftime um daraus die gewünschten Daten zu drucken.

char buff[20];
time_t now = time(NULL);
strftime(buff, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));

  • +1 gute Antwort. Verwenden Sie jedoch localtime_r(), falls Ihr Code jemals in einer wiedereintrittsfähigen Umgebung verwendet wird.

    – Amardeep AC9MF

    16. Juni 2010 um 14:19 Uhr

  • @Amardeep: Er hat ausdrücklich um Portabilität gebeten, und localtime_r kann sich in dieser Hinsicht nicht qualifizieren (hängt davon ab, welche Ziele ihm wichtig sind).

    – Jerry Sarg

    16. Juni 2010 um 14:22 Uhr

  • localtime_r ist zu diesem Zeitpunkt seit 18 Jahren Teil von POSIX. Ich denke, es ist sicher anzunehmen, dass es verfügbar sein wird.

    – Arran Cudbard-Bell

    30. August 2015 um 3:06 Uhr

  • @ArranCudbard-Bell: Zumindest aus meiner Sicht ist die Beschränkung auf POSIX im Wesentlichen gleichbedeutend mit “nicht portabel”. Es gibt kein einziges Betriebssystem mit einem ausreichend großen Marktanteil, um es zu bemerken, das einen ernsthaften Versuch unternimmt, POSIX genau zu implementieren (und ja, ich kenne Linux, bin mir aber bewusst, dass seine POSIX-Konformität bestenfalls lückenhaft ist).

    – Jerry Sarg

    1. Juli 2016 um 15:51 Uhr


  • @JerryCoffin was würdest du dann als tragbar betrachten? … und nicht nur Linux, *BSD, Solaris (ish), OSX und sogar Windows (ish) bieten POSIX-konforme APIs. Insbesondere für Netzwerke sind sie nicht zu 100 % identisch/konform, aber für einfache Hilfsfunktionen wie strlen, time, localtime sind sie ziemlich ähnlich, wenn nicht identisch, in der Art und Weise, wie sie die POSIX-Standards interpretieren.

    – Arran Cudbard-Bell

    1. Juli 2016 um 18:59 Uhr


Ihre einzige wirkliche Option aus dem Kopf ist, entweder Ihre eigene Routine zu schreiben oder die in POSIX.1/C90 definierte Funktion ctime() zu verwenden. ctime() ist sicherlich einen Blick wert, aber wenn Ihr Datum nicht bereits in der richtigen Zeitzone liegt, werden Sie auf Probleme stoßen.

BEARBEITEN: Ich habe nicht daran gedacht, die Ortszeit zu verwenden, wie unten von Jerry erwähnt. Wenn Sie es in ein struct tm konvertieren, haben Sie mehr Möglichkeiten, einschließlich der von ihm erwähnten und strptime().

  • Nein, strftime wurde erwähnt, strptime jedoch nicht, es handelt sich um zwei separate (aber ähnliche) Funktionen. Während strftime Teil von C90 ist, ist strptime jedoch nicht vorhanden. Wenn es also auf den Zielplattformen nicht vorhanden ist, ignorieren Sie diesen Teil.

    – Jer

    16. Juni 2010 um 17:38 Uhr

1403220cookie-checkC – Konvertiere time_t in einen String mit dem Format YYYY-MM-DD HH:MM:SS

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

Privacy policy