Unterschied zwischen zwei Daten in C

7

Ich bin ein Anfänger in C.

  • Gibt es einen Datentyp für Daten?
  • In C arbeiten wir mit der Zeit, gibt es auch eine für Termine?
  • Wie kann ich die Differenz zwischen zwei Daten berechnen?
Ehsan 18.12.2012, 12:22
quelle

8 Antworten

2
  

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 )

ermitteln %Vor%

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?

    
Grijesh Chauhan 18.12.2012, 12:31
quelle
15

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.

    
prehistoricpenguin 18.12.2012 12:33
quelle
4
  

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).

    
Steve Jessop 18.12.2012 12:33
quelle
2

Sie können ein struct benanntes Datum mit folgenden Feldern erstellen

%Vor%

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.

    
Omkant 18.12.2012 12:24
quelle
2

Sie müssen eine Datumsstruktur definieren:

%Vor%

Und dann definieren Sie eine einfache date_compare() -Methode:

%Vor%     
martynas 14.03.2014 21:57
quelle
1

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 .

%Vor%

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.

%Vor%

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 .

    
Schwern 21.03.2017 11:16
quelle
0
%Vor%     
Eagle11 06.05.2016 13:06
quelle
0
%Vor%     
Darijo11 20.05.2016 18:20
quelle

Tags und Links