CodeBlanks Logo Icon CodeBlanks

time.h

  • C kursu
  • Orta seviye
  • Ders 85/116
  • 5 dk

time.h ile tarih ve saat öğrenirsin.

time.h

<time.h> başlığı tarih ve saat işlemleri sunar: time_t (zaman türü), struct tm (parçalı tarih) ve mktime (parçalı tarihi zaman damgasına çevirir).

struct tm bir tarihi parçalara ayırır: tm_year (1900'den itibaren yıl), tm_mon (0–11 arası ay), tm_mday (ayın günü), tm_wday (0–6 arası hafta günü; 0 Pazar). mktime(&t) eksik alanları (örneğin tm_wday) hesaplar ve doldurur. Örnek: struct tm t = {0}; t.tm_year = 100; t.tm_mon = 0; t.tm_mday = 1; mktime(&t);. Bundan sonra t.tm_wday 1 Ocak 2000'in hafta gününü verir. time(NULL) ise o anki zaman damgasını verir; ancak bu değer her çalışmada değiştiği için deterministik değildir.

mktime ile hafta günü bulma

mktime sadece zaman damgası vermez; aynı zamanda struct tm'deki eksik alanları da doldurur. Bu sayede verilen bir tarihin hafta gününü bulabiliriz.

1 Ocak 2000 için: struct tm t = {0}; t.tm_year = 100; t.tm_mon = 0; t.tm_mday = 1; mktime(&t);. Çağrıdan sonra t.tm_wday 6 olur; çünkü 1 Ocak 2000 bir Cumartesi'dir (0=Pazar, 6=Cumartesi). struct tm t = {0} ile başlatmak önemlidir; aksi halde kullanılmayan alanlar çöp değer taşıyabilir ve mktime yanlış sonuç verebilir. Bu teknik, belirli bir tarihin hafta gününü bulmak için yaygındır; takvim veya planlama uygulamalarında kullanılır.

Uygulama Hafta gününü bul

main'de struct tm t = {0}; ile başla. t.tm_year = 100;, t.tm_mon = 0;, t.tm_mday = 1;. mktime(&t); çağır. printf("Gün: %d\n", t.tm_wday); ile yazdır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <time.h>

// main: struct tm bildir ve sıfırla
// tm_year = 100 (2000 yılı), tm_mon = 0 (Ocak), tm_mday = 1
// mktime ile normalize et, tm_wday'i yazdır

int main(void) {
    // buraya yaz
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>
#include <time.h>

int main(void) {
    struct tm t = {0};
    t.tm_year = 100;
    t.tm_mon = 0;
    t.tm_mday = 1;
    mktime(&t);
    printf("Gün: %d\n", t.tm_wday);
    return 0;
}

Beklenen çıktı

Gün: 6

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 struct tm'de tm_mon = 0 hangi ayı belirtir?

  • Şubat
  • Ocak Doğru cevap
  • Yıl başı
  • Aralık

Açıklama: tm_mon 0–11 arasıdır; 0 Ocak'tır.

2 Yıl ayarı

Soru
t.tm_____ = 100;  // 2000 yılı
Cevap
t.tm_year = 100;  // 2000 yılı

Açıklama: tm_year 1900'den itibaren sayılır; 100 → 2000.

3 struct tm alanları

Kavram Anlamı
tm_year yıl (1900'den)
tm_mon ay (0–11)
tm_mday ayın günü
tm_wday hafta günü

Orta seviye bölümündeki tüm dersler