# 3.11 Tarih ve Zaman (Date and Time)

C++ dilinde tarih ve zaman ile çalışmak, programların zaman duyarlı verileri işlemesine olanak tanır. C++'da tarih ve saat ile çalışmak için genellikle `<chrono>`, `<ctime>` gibi kütüphaneler kullanılır. Bu kütüphaneler, zaman aralıklarını hesaplama, tarihleri ve saatleri yönetme gibi çeşitli işlevler sunar.

**C++’da Zamanı Kullanma**

C++'da tarih ve zaman ile çalışmak için en yaygın kullanılan kütüphaneler şunlardır:

* **`<ctime>` Kütüphanesi**: C tarzı zaman işlevlerini içerir.
* **`<chrono>` Kütüphanesi**: Modern C++ için zaman yönetimi sağlar.

**Temel Zaman Fonksiyonları**

**1. `<ctime>` Kütüphanesi ile Zaman Yönetimi:**

`<ctime>` kütüphanesi, tarih ve saatle ilgili işlevler ve tipler sağlar. Bu kütüphaneyi kullanarak zamanın alınması ve formatlanması gibi işlemleri gerçekleştirebilirsiniz.

```cpp
#include <iostream>
#include <ctime>

int main() {
    // Zamanı almak
    time_t simdikiZaman = time(0); // Geçerli zamanı al
    char* zamanString = ctime(&simdikiZaman); // Zamanı formatla

    std::cout << "Geçerli Zaman: " << zamanString << std::endl; // Zamanı yazdır

    return 0;
}
```

**2. `<chrono>` Kütüphanesi ile Zaman Yönetimi:**

`<chrono>` kütüphanesi, daha fazla esneklik ve modern bir API sağlar. Zaman aralıklarını ve süreleri kolayca yönetmenizi sağlar.

```cpp
#include <iostream>
#include <chrono>
#include <thread> // thread için

int main() {
    // Geçerli zamanı al
    auto baslangic = std::chrono::high_resolution_clock::now(); // Başlangıç zamanını al

    // Bir süre bekle
    std::this_thread::sleep_for(std::chrono::seconds(2)); // 2 saniye bekle

    // Bitiş zamanını al
    auto bitis = std::chrono::high_resolution_clock::now(); // Bitiş zamanını al

    // Süreyi hesapla
    std::chrono::duration<double> sure = bitis - baslangic;
    std::cout << "Geçen süre: " << sure.count() << " saniye" << std::endl; // Süreyi yazdır

    return 0;
}
```

**Önemli Fonksiyonlar ve Kavramlar**

* **`time_t`**: Zamanı temsil eden bir veri türüdür. 1 Ocak 1970'ten (Unix Epoch) geçen saniye sayısını tutar.
* **`struct tm`**: Yerel zaman bilgisini tutan bir yapı tipidir. Yıl, ay, gün, saat, dakika ve saniye bilgilerini içerir.
* **`std::chrono::duration`**: İki zaman noktası arasındaki süreyi temsil eder.
* **`std::chrono::high_resolution_clock`**: Yüksek çözünürlüklü zaman ölçümünü sağlar.

**Sonuç**

C++’da tarih ve zaman ile çalışmak, programların zamanla ilişkili işlemleri gerçekleştirmesine olanak tanır. Gelişmiş zaman yönetimi için `<chrono>` kütüphanesi önerilir. Tarih ve zaman işlevlerini etkili bir şekilde kullanmak, uygulamalarınızın daha fonksiyonel ve kullanıcı dostu olmasına yardımcı olur.
