Gibt es einen Datentyp für Datumsangaben?
Nein, eingebauter Datentyp in C
, Sie müssen einen benutzerdefinierten Datentyp definieren.
Wie kann ich den Unterschied zwischen zwei Daten berechnen?
Sie können dies versuchen:
%Vor% In main () müssen Sie drei Variablen für den Typ data
deklarieren.
Im folgenden Beispiel today
difference,
zum Beispiel möchten Sie die Differenz zwischen dem aktuellen Datum ( c_date
) und dem Geburtsdatum ( dob
)
In today
haben Sie einen Unterschied zwischen zwei Daten.
Es gibt einen weiteren Weg: double difftime (time_t end, time_t beginning);
Lesen Sie diese Antworten:
1. Vergleichen zweier Zeitstempel im Format" Monat Datum hh: mm: ss "
2. Wie finden Sie den Unterschied zwischen zwei Daten in Stunden, in C?
Ja, die Standardbibliothek C Time Library
enthält die gewünschten Strukturen und Funktionen. Sie können struct tm
verwenden. um Datum und difftime
zu speichern, um die Differenz zu erhalten.
Gibt es einen Datentyp für Speicherdaten?
Nein, obwohl für Daten im Bereich "Jetzt plus oder minus ein paar Dekaden" time_t
oder struct tm
verwendet werden könnte, die die Datumswerte um (zum Beispiel) Mitternacht des betreffenden Tages enthalten. Alternativ könntest du in eine Sache schauen, die "Julianischer Tag" genannt wird: berechne das und speichere es in dem ganzzahligen Typ, den du magst.
Gibt es auch eine Bibliothek für C?
Die Standardfunktionen beziehen sich alle auf Datum / Uhrzeit und nicht nur auf Daten: mktime
, localtime
, gmtime
.
Wie kann ich unterschiedliche Datumsangaben berechnen
?
Sobald Sie es in time_t
haben, können Sie die beiden subtrahieren und durch 86400 dividieren. Beachten Sie jedoch, da "Mitternacht Ortszeit" an zwei verschiedenen Tagen aufgrund des Tageslichts möglicherweise kein exaktes Vielfaches von 24 Stunden ist Einsparungen Änderungen.
Wenn Sie einen Kalender benötigen, der den Bereich von time_t
bei Ihrer Implementierung überschreitet, dann sind Sie grundsätzlich auf sich allein gestellt. Wenn time_t
64 Bits ist, dann ist das mehr als das Alter des Universums, aber wenn time_t
32 Bits ist, ist es nicht gut für die Geschichte. Oder Rentenplanung, sogar. Historische Anwendungen haben ohnehin ihre eigenen Anforderungen an Kalender (julianischer Kalender, Kalender, die nichts mit Gregorian zu tun haben).
Sie können ein struct
benanntes Datum mit folgenden Feldern erstellen
Es ist nur eine Blaupause, was Sie wollen, jetzt machen und Objekt von date
und arbeiten entsprechend.
Um den Unterschied zu finden, schreibe eine Funktion, um einen Unterschied zwischen day
month
und year
der beiden Stucts zu machen.
Die Standard-C-Bibliothek Optionen für Daten und Zeiten sind ziemlich schlecht und mit Vorbehalten und Einschränkungen geladen. Wenn möglich, benutze eine Bibliothek wie Gnome Lib, die GDate und zahlreiche nützliche Funktionen zur Verfügung stellt Datums- und Uhrzeitfunktionen . Dazu gehören g_date_days_between()
für die Anzahl der Tage zwischen zwei Daten erhalten.
Der Rest dieser Antwort beschränkt sich auf die Standard-C-Bibliothek, aber wenn Sie sich nicht auf den Standard beschränken müssen, quälen Sie sich nicht. Termine sind überraschend schwer.
Gibt es einen Datentyp für Datumsangaben?
struct tm
wird geliefert. Lass die Stunden, Minuten und Sekunden bei 0 liegen.
Der einfachste Weg, um sicherzustellen, dass alle Felder von struct tm
richtig ausgefüllt sind, ist strptime
.
Aber das ist keine großartige Möglichkeit, Daten zu speichern. Es stellt sich heraus, dass es besser ist Julian Days zu verwenden (siehe unten).
In C haben wir für die Arbeit mit der Zeit, gibt es auch eine für Termine?
Wenn Sie sich auf time_t
beziehen, gilt dies auch für Datums- und Uhrzeitangaben. Es ist die Anzahl der Sekunden seit "die Epoche" , die 1970-01-01 00:00:00 UTC auf POSIX-Systemen ist , aber nicht unbedingt andere. Unglücklicherweise ist sein sicherer Bereich nur von 1970 bis 2037, obwohl jede neuere Version eines Betriebssystems diesen Bereich stark erweitert hat.
Wie kann ich den Unterschied zwischen zwei Daten berechnen?
Hängt davon ab, was Sie wollen. Wenn Sie die Anzahl der Sekunden möchten, können Sie struct tm
in time_t
mit mktime
umwandeln und dann difftime
, aber das ist auf den sicheren Bereich von time_t
von 1970-2037 beschränkt.
Wenn Sie die Anzahl der Tage festlegen möchten, konvertieren Sie die Daten in Julianische Tage , die Anzahl der Tage Tage seit dem 24. November, 4714 BC, und subtrahieren Sie. Obwohl das vielleicht lächerlich erscheint, nutzt diese relativ einfache Formel Kalenderzyklen aus und verwendet nur ganzzahlige Mathematik.
%Vor%Es gibt andere einfache Formeln zum Konvertieren zwischen Julianischen Daten und Kalenderdaten.
Diffs in Jahren, Monaten und Tagen zu bekommen ist schwierig, da die Anzahl der Tage in einem Monat von Monat zu Jahr variiert und weil es normalisiert werden muss. Zum Beispiel würden Sie nicht 2 Jahre, 1 Monate, 2 Tage sagen. Sie würden sagen 1 Jahr, 11 Monate, 29 Tage (oder vielleicht 28, hängt vom Monat ab). Aus diesem Grund sollten Sie, wann immer möglich, in den Julianischen Tagen Datumsangaben machen.
Um eine Vorstellung davon zu bekommen, implementiert PHP dies als date_diff
. Sehen Sie sich den benötigten C-Code an .