C Programlama Dili'nde 2 tarih arasındaki farkı gün olarak alma

Yazar: Admin

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;
}