Kategori: Yazılım
C Programlama Dili'nde verilen 2 tarih arasındaki farkı gün olarak almak için time.h başlık dosyası içinde tanımlanmış olan tarih ve zaman fonksiyonları ile veri türlerini kullanabiliriz.
Öncelikle kaynak dosyanızın başına time.h başlık dosyasını ekleyin:
#include <time.h>
Fonksiyon içinde kullanılan fonksiyon ve veri türlerinin aşağıda belirtilen amaçlarla kullanılmıştır:
/* Verilen tarihten time_t değeri elde etmek için kullanılır. */
struct tm tmzaman;
mktime() fonksiyonuna parametre oluşturarak time_t nesnesi elde etmek için tm yapısı kullanılır.
struct tm { int tm_sec; /* Saniye: 0-59 */ int tm_min; /* Dakika: 0-59 */ int tm_hour; /* Gece yarısından itibaren geçen zaman: 0-23 */ int tm_mday; /* Ayın gün sayısı: 1-31 */ int tm_mon; /* Ocak'tan itibaren ay sayısı: 0-11 */ int tm_year; /* 1900 yılından bu yana yıl sayısı */ int tm_wday; /* Pazar'dan bu yana gün saysıı (0-6) */ int tm_yday; /* 1 Ocak'tan bu yana gün sayısı: 0-365 */ int tm_isdst; /* +1 Günışığı devrede, Günışığı yok, -1 Bilgi yok */ };
dgun = difftime(timeson, timeon) / (60 * 60 * 24); /* 2 zaman farkını elde etmek için kullanılır. */
/* 2 time_t nesnesi arasındaki farkı saniye olarak geri verir. */
double difftime (time_t, time_t);
Fonksiyon kullanımı:
GunFarki("25.02.2012", "15.09.2011");
Elde edilen çıktı:
163
int GunFarki(char *pson, char *pon)
{
struct tm tmzaman;
time_t timeson, timeon;
char ctemp[5];
int don=0;
double dgun;
/* İlk zaman değeri için tm yapısını doldurma ve time_t değeri oluşturma */
tmzaman.tm_sec = 1;
tmzaman.tm_min = 0;
tmzaman.tm_hour = 0;
tmzaman.tm_isdst = -1;
strncpy (ctemp, &pson[0], 2);
ctemp[2]='\\0';
tmzaman.tm_mday = atoi (ctemp);
strncpy (ctemp, &pson[3], 2);
ctemp[2]='\\0';
tmzaman.tm_mon = atoi (ctemp);
tmzaman.tm_mon--;
strncpy (ctemp, &pson[6], 4);
ctemp[4]='\\0';
tmzaman.tm_year = atoi (ctemp);
tmzaman.tm_year -= 1900;
timeson = mktime(&tmzaman);
/* İkinci zaman değeri için tm yapısını doldurma ve time_t değeri oluşturma */
tmzaman.tm_sec = 1;
tmzaman.tm_min = 0;
tmzaman.tm_hour = 0;
tmzaman.tm_isdst = -1;
strncpy (ctemp, &pon[0], 2);
ctemp[2]='\\0';
tmzaman.tm_mday = atoi (ctemp);
strncpy (ctemp, &pon[3], 2);
ctemp[2]='\\0';
tmzaman.tm_mon = atoi (ctemp);
tmzaman.tm_mon--;
strncpy (ctemp, &pon[6], 4);
ctemp[4]='\\0';
tmzaman.tm_year = atoi (ctemp);
tmzaman.tm_year -= 1900;
timeon = mktime(&tmzaman);
if(timeson < timeon) don = -1;
else {
dgun = difftime(timeson, timeon) / (60 * 60 * 24);
don = dgun;
}
return don;
}