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
#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
#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ı
t.tm_____ = 100; // 2000 yılı
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ü |