1. DateTime Sınıfına Genel Bakış

DateTime sınıfı, tarih ve saat işlemlerini kolayca yönetmek için tasarlanmış bir yapıdır. İster doğrudan belirli bir tarihi kullanarak, ister sistem saatini alarak tarih ve saat bilgilerine erişebilir, bu bilgileri düzenleyebilir ve formatlayabilirsiniz. Ayrıca, DateTime sınıfı birçok yardımcı metot ve özelliğiyle zaman hesaplamaları yapmanıza olanak tanır.

// DateTime nesnesi oluşturmanın temel yolları
DateTime now = DateTime.Now; // Şu anki tarih ve saat
DateTime today = DateTime.Today; // Sadece bugünün tarihi
DateTime specificDate = new DateTime(2024, 9, 26, 14, 30, 0); // Belirli bir tarih ve saat

Console.WriteLine($"Şu an: {now}");
Console.WriteLine($"Bugün: {today}");
Console.WriteLine($"Belirli Tarih: {specificDate}");

2. DateTime Yapıcıları ve Özellikleri

DateTime sınıfını kullanırken, tarih ve saat oluşturmak için farklı yapıcıları kullanabilirsiniz. Yapıcıların yanı sıra, DateTime sınıfı yıl, ay, gün, saat, dakika gibi değerleri ayrı ayrı alabileceğiniz özellikler de sunar. Ayrıca, statik özelliklerle güncel tarih ve saat bilgilerini elde edebilirsiniz.

// DateTime yapıcıları ve özellikler
DateTime tarih1 = new DateTime(2024, 9, 26); // Yıl, ay, gün
DateTime tarih2 = new DateTime(2024, 9, 26, 14, 30, 45); // Yıl, ay, gün, saat, dakika, saniye

Console.WriteLine($"Tarih 1: {tarih1.ToShortDateString()}");
Console.WriteLine($"Tarih 2: {tarih2}");

Console.WriteLine($"Yıl: {tarih2.Year}");
Console.WriteLine($"Ay: {tarih2.Month}");
Console.WriteLine($"Gün: {tarih2.Day}");
Console.WriteLine($"Saat: {tarih2.Hour}");
Console.WriteLine($"Dakika: {tarih2.Minute}");
Console.WriteLine($"Saniye: {tarih2.Second}");

3. Tarih ve Saat Arasında Fark Hesaplama (TimeSpan)

DateTime sınıfı ile iki tarih arasında fark hesaplamanız gerektiğinde, bu işlemi TimeSpan sınıfı ile gerçekleştirebilirsiniz. TimeSpan, tarih ve saatler arasındaki farkı gün, saat, dakika, saniye gibi birimlerle hesaplamaya olanak tanır.

// İki tarih arasında fark hesaplama
DateTime tarih1 = new DateTime(2024, 9, 26, 14, 0, 0);
DateTime tarih2 = DateTime.Now;

TimeSpan fark = tarih2 - tarih1;

Console.WriteLine($"Gün farkı: {fark.Days}");
Console.WriteLine($"Saat farkı: {fark.Hours}");
Console.WriteLine($"Dakika farkı: {fark.Minutes}");
Console.WriteLine($"Toplam fark (saat cinsinden): {fark.TotalHours}");

4. Tarih ve Saat Hesaplama (Add Metotları)

DateTime sınıfı, tarih ve saat işlemleri için ekleme ve çıkarma yapmanıza olanak sağlayan bir dizi Add metoduna sahiptir. Bu metotlar sayesinde tarih ve saate gün, ay, yıl, saat, dakika, saniye gibi birimleri ekleyebilir veya çıkarabilirsiniz.

// Tarih ve saate birim ekleme
DateTime suankiTarih = DateTime.Now;

DateTime gelecek = suankiTarih.AddDays(5); // 5 gün ekle
DateTime gelecekSaat = suankiTarih.AddHours(3); // 3 saat ekle

DateTime gecmis = suankiTarih.AddDays(-5); // 5 gün çıkar
DateTime gecmisSaat = suankiTarih.AddHours(-3); // 3 saat çıkar

Console.WriteLine($"Şu anki tarih: {suankiTarih}");
Console.WriteLine($"5 gün sonra: {gelecek}");
Console.WriteLine($"3 saat sonra: {gelecekSaat}");

Console.WriteLine($"5 gün önce: {gecmis}");
Console.WriteLine($"3 saat önce: {gecmisSaat}");

5. Tarih ve Saat Formatlama (ToString)

DateTime nesneleri genellikle insan okuyabileceği şekilde formatlanarak gösterilir. C# dilinde ToString metodu kullanılarak tarih ve saatler istediğiniz formatta gösterilebilir. Standart formatlar kullanılabileceği gibi özel formatlar da oluşturulabilir.

// Tarih ve saati farklı formatlarda gösterme
DateTime tarih = DateTime.Now;

string format1 = tarih.ToString("MM/dd/yyyy"); // Amerikan tarzı
string format2 = tarih.ToString("dd.MM.yyyy HH:mm:ss"); // Türk tarzı
string format3 = tarih.ToString("dddd, dd MMMM yyyy"); // Detaylı tarih

Console.WriteLine($"Format 1: {format1}");
Console.WriteLine($"Format 2: {format2}");
Console.WriteLine($"Format 3: {format3}");

6. Geçerli ve Geçersiz Tarih Kontrolü (TryParse ve Parse Metotları)

Kullanıcı tarafından girilen tarih ve saat bilgilerini doğru formatta olup olmadığını kontrol etmek için Parse veya TryParse metotları kullanılır. TryParse, hatalı tarih formatlarını kontrol etmek için güvenli bir yol sağlar ve işlemin başarılı olup olmadığını döndürür.

// Tarih ve saat kontrolü
string input = "26/09/2024";
bool success = DateTime.TryParse(input, out DateTime parsedDate);

if (success)
{
    Console.WriteLine($"Başarılı şekilde çevrilen tarih: {parsedDate}");
}
else
{
    Console.WriteLine("Geçersiz tarih formatı.");
}

7. Zaman Dilimleri ve UTC (Coordinated Universal Time)

C#'ta tarih ve saat işlemlerinde, yerel tarih ve saat bilgileri UTC'ye (Evrensel Koordinatlı Zaman) dönüştürülerek uluslararası uygulamalarda daha doğru zaman yönetimi sağlanabilir. DateTime.UtcNow ile o anki UTC zamanını alabilirsiniz. Ayrıca, ToLocalTime metodu ile UTC saatini yerel saate dönüştürebilirsiniz.

// UTC ve yerel saat farkı
DateTime utcTime = DateTime.UtcNow;
DateTime localTime = utcTime.ToLocalTime();

Console.WriteLine($"UTC Zamanı: {utcTime}");
Console.WriteLine($"Yerel Zaman: {localTime}");

8. DateTimeOffset Sınıfı

DateTime sınıfı yalnızca belirli bir zaman dilimini temsil ederken, DateTimeOffset sınıfı hem zamanı hem de o zamanın hangi zaman diliminde olduğunu saklar. Bu, özellikle farklı zaman dilimlerinde çalışan uygulamalar için kullanışlıdır.

// DateTimeOffset kullanımı
DateTimeOffset tarihSaat = DateTimeOffset.Now;
DateTimeOffset utcSaat = DateTimeOffset.UtcNow;

Console.WriteLine($"Yerel saat ve dilim: {tarihSaat}");
Console.WriteLine($"UTC saat: {utcSaat}");

Hepsinin Bir Arada Kullanıldığı Örnek:

Bu örnekte, bir kullanıcının doğum tarihini alıp, kaç gün yaşadığını hesaplayarak, bu süre zarfında geçen saat, dakika ve saniyeyi formatlı bir şekilde gösteriyoruz.

string input="26/09/1990"; // Örnek doğum tarihi, İsterseniz değiştirebilirsiniz.
if (DateTime.TryParse(input, out DateTime birthDate))
{
    DateTime today=DateTime.Today;
    TimeSpan yasamSuresi=today-birthDate;

    Console.WriteLine($"Yaşadığınız gün sayısı: {yasamSuresi.Days}");
    Console.WriteLine($"Yaşadığınız saat sayısı: {yasamSuresi.TotalHours}");
    Console.WriteLine($"Yaşadığınız dakika sayısı: {yasamSuresi.TotalMinutes}");
    Console.WriteLine($"Yaşadığınız saniye sayısı: {yasamSuresi.TotalSeconds}");

    Console.WriteLine($"Bugün: {today.ToString("dd.MM.yyyy")}");
    Console.WriteLine($"Doğduğunuz gün: {birthDate.ToString("dddd, dd MMMM yyyy")}");
}
else
{
    Console.WriteLine("Geçersiz tarih formatı.");
}