Bildirim
time_t mktime(struct tm *tmptr);
Açıklama
Tmptr parametresi ile gösterilen tm zaman yapısı içindeki değerleri, yerel zamana uygun olarak, time_t zaman veri türüne çevirir. Bu fonksiyon, localtime() fonksiyonunun yaptığı işlemin tersini gerçekleştirir.
Tmptr->tm_wday ve tmptr->tm_yday değerleri dikkate alınmaz. Time_t veri türüne dönüşüm başarılı olursa, time değişkeni değiştirilir. Tüm zaman değerleri kendi geçerli aralık değerlerine uyacak şekilde güncellenir. Tmptr->tm_wday ve tmptr->tm_yday diğer alanlardaki bilgiler kullanılarak yeniden hesaplanır.
Parametreler
tmptr: Çevrilecek olan tm yapı değişkenini gösteren bir işaretçidir.
struct tm { int tm_sec; /* Saniye: 0-59 */ int tm_min; /* Dakika: 0-59 */ int tm_hour; /* Saat : 0-23 */ int tm_mday; /* Ayın günü: 1-31 */ int tm_mon; /* Aylar Ocak'tan itibaren: 0-11 */ int tm_year; /* Yıllar 1900'den itibaren */ int tm_wday; /* Hafta gün sayısı Pazar'dan itibaren (0-6) */ int tm_yday; /* Yıl gün sayısı 1 Ocak'tan itibaren : 0-365 */ int tm_isdst; /* +1 Günışığından Faydalanma Zamanı, 0 GFZ yok, -1 Bilgi yok */ };
Dönüş değeri
Başarı durumunda takvim zamanını gösteren bir time_t değişkeni, hata durumunda ise -1 değeri geri döndürür.
Örnek
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t time_1970, time_3month;
struct tm *time_detay;
double ret;
time_1970 = time(NULL);
/* 1 Ocak 1970'den bugüne saniye olarak geçen zaman */
printf("1 Ocak 1970'den bugüne geçen zaman: %ld saniye\n", time_1970);
/* Yerel zaman */
time_detay = localtime(&time_1970);
printf("Yerel zaman: %s", asctime(time_detay));
/* 3 ay geri gidiş */
time_detay->tm_mon -= 3;
time_3month = mktime(time_detay);
printf("3 ay önceki yerel zaman: %s", ctime(&time_3month));
ret = difftime(time_1970, time_3month);
printf("3 ay önceden bu ana kadar %.2f saniye geçti.", ret);
return 0;
}
Yukarıdaki örnekte, program aşağıdaki satırları ekrana yazar.
1 Ocak 1970'den bugüne geçen zaman: 1571127666 saniye Yerel zaman: Tue Oct 15 11:21:06 2019 3 ay önceki yerel zaman: Mon Jul 15 11:21:06 2019 3 ay önceden bu ana kadar 7948800.00 saniye geçti.
Program time() fonksiyonu ile 1 Ocak 1970'den bugüne geçen zamanı saniye olarak alır ve ekrana yazar. Bu değeri localtime() fonksiyonu ile yerel zamana çevirerek, asctime() fonksiyonu ile ekrana yazar. Zaman yapısı içinde sadece tm_mon değerini 3 ay geri alarak mktime() fonksiyonu ile yeni bir time_t değeri oluşturur. Yeni zamanı ctime() fonksiyonu ile ekrana yazar. Son olarak, difftime() fonksiyonu iki zaman diliminin farkını saniye olarak alır ve elde ettiği değeri ekrana yazar.