2016-06-06 13 views
2

Für ein Projekt im Entwickeln muss ich einen Unterschied zwischen zwei Daten finden, um zu überprüfen, welche jünger ist, und mir ging es gut, aber ich fand einen kleinen Fehler.C Unterschied zwischen Tagen 1 Tag funktioniert nicht

für die Tage struct tm im mit, das ist der Code:

struct tm firstDate, secondDate; 
firstDate.tm_hour = 0; 
firstDate.tm_min = 0; 
firstDate.tm_sec = 0; 
firstDate.tm_mon = 5; 
firstDate.tm_mday = 30; 
firstDate.tm_year = 2016 - 1900; //difference between current year and 1900 

secondDate.tm_hour = 0; 
secondDate.tm_min = 0; 
secondDate.tm_sec = 0; 
secondDate.tm_mon = 6; 
secondDate.tm_mday = 1; 
secondDate.tm_year = 2016 - 1900; 

time_t fDate = mktime(&firstDate); // 31/5/2016 
time_t sDate = mktime(&secondDate); // 1/6/2016 
int diff = (difftime(fDate, sDate)); 

printf("%d", diff/86400); 

es in jedem Zeitpunkt funktioniert, außer wenn ich will, wie ein Datum am Ende des Monats vergleichen (31/5/2016) mit dem folgenden Tag (1/6/2016), gibt es mir 0 Tage zurück und es sollte 1 zurückgeben. Aber wenn ich es zum 30/5/2016 ändere, gibt es 1 Tag statt 2 zurück. Das Ding ist kann 31 Tage sein nicht 30 .. so funktioniert es in einigen Monaten und in anderen funktioniert es nicht .. weiß jemand, wie man darüber hinaus kommt?

Vielen Dank im Voraus und sorry für mein schlechtes Englisch, ist es nicht meine Muttersprache

Antwort

2

Der Wert 0, nicht mehr als 1, in secondDate.tm_mon für den Monat Januar steht.

Try this:

struct tm firstDate, secondDate; 
firstDate.tm_hour = 0; 
firstDate.tm_min = 0; 
firstDate.tm_sec = 0; 
firstDate.tm_mon = 5 - 1; 
firstDate.tm_mday = 30; 
firstDate.tm_year = 2016 - 1900; //difference between current year and 1900 

secondDate.tm_hour = 0; 
secondDate.tm_min = 0; 
secondDate.tm_sec = 0; 
secondDate.tm_mon = 6 - 1; 
secondDate.tm_mday = 1; 
secondDate.tm_year = 2016 - 1900; 

time_t fDate = mktime(&firstDate); // 31/5/2016 
time_t sDate = mktime(&secondDate); // 1/6/2016 
int diff = (difftime(fDate, sDate)); 

printf("%d", diff/86400); 
+0

thanks man wirklich zu schätzen. Ich werde die Antwort akzeptieren, wenn ich kann – jamez

Verwandte Themen