Yükleniyor...

C# DateTime & TimeSpan ile Tarih İşlemleri

C#’ta DateTime ve TimeSpan kullanarak tarih ve zaman işlemlerini öğrenin. Karşılaştırma, ekleme, çıkarma ve formatlama örnekleriyle.

C#’ta tarih ve saat işlemleri için DateTime ve TimeSpan yapıları kullanılır. DateTime bir anı temsil ederken, TimeSpan iki tarih arasındaki farkı yani zaman aralığını tutar. Bu yapılar sayesinde tarih karşılaştırma, ekleme/çıkarma, biçimlendirme gibi işlemler kolayca yapılabilir.


DateTime Nedir?

DateTime yapısı, belirli bir tarihi ve zamanı temsil eder.


DateTime simdi = DateTime.Now;
Console.WriteLine(simdi);       // Şu anki tarih ve saat
Console.WriteLine(DateTime.UtcNow); // Evrensel zaman

DateTime ile Temel Özellikler

Tarih bilgilerini tek tek almak mümkündür:


DateTime tarih = new DateTime(2025, 9, 9, 14, 30, 0);

Console.WriteLine(tarih.Year);   // 2025
Console.WriteLine(tarih.Month);  // 9
Console.WriteLine(tarih.Day);    // 9
Console.WriteLine(tarih.Hour);   // 14
Console.WriteLine(tarih.Minute); // 30

Console.WriteLine(tarih.ToShortDateString()); // 9.09.2025
Console.WriteLine(tarih.ToLongDateString());  // 9 Eylül 2025 Salı

DateTime ile İşlemler

Bir tarihe gün, ay veya yıl eklemek/çıkarmak için Add metotları kullanılır.


DateTime bugun = DateTime.Now;

Console.WriteLine(bugun.AddDays(5));   // 5 gün sonrası
Console.WriteLine(bugun.AddMonths(-1)); // 1 ay öncesi

DateTime gelecek = bugun.AddYears(1);
Console.WriteLine(gelecek); // 1 yıl sonrası

// İki tarih arasındaki fark
DateTime dogum = new DateTime(2000, 1, 1);
TimeSpan fark = bugun - dogum;

Console.WriteLine($"Toplam gün: {fark.Days}");

TimeSpan Nedir?

TimeSpan, bir zaman aralığını temsil eder.


TimeSpan sure = new TimeSpan(2, 30, 0); // 2 saat 30 dakika
Console.WriteLine(sure.TotalMinutes);   // 150 dakika

DateTime – TimeSpan Birlikte Kullanımı

Bir tarihe TimeSpan ekleyerek yeni bir tarih oluşturabiliriz.


DateTime simdi = DateTime.Now;
TimeSpan ucSaat = new TimeSpan(3, 0, 0);

DateTime yeniTarih = simdi + ucSaat;
Console.WriteLine(yeniTarih);

Tarih Karşılaştırma

Tarihler >, <, == ile karşılaştırılabilir. Ayrıca Compare metodu da kullanılabilir.


DateTime t1 = new DateTime(2025, 1, 1);
DateTime t2 = new DateTime(2025, 12, 31);

Console.WriteLine(t1 < t2); // true
Console.WriteLine(DateTime.Compare(t1, t2)); // -1 (t1 küçük)

Bir tarihin belirli bir yıl veya ayda olup olmadığını kontrol etmek:


DateTime tarih = new DateTime(2025, 9, 9);

bool ayniYil = (tarih.Year == 2025);  // true
bool ayniAy = (tarih.Month == 9);     // true

Tarih Formatlama

ToString metodu ile özel formatlar kullanılabilir.


DateTime simdi = DateTime.Now;

Console.WriteLine(simdi.ToString("dd.MM.yyyy"));       // 09.09.2025
Console.WriteLine(simdi.ToString("dd.MM.yy"));       // 09.09.25
Console.WriteLine(simdi.ToString("yyyy-MM-dd HH:mm")); // 2025-09-09 14:45

Örnek Uygulama: Proje Süresi ve Günlük Ücret Hesaplama


Console.Write("Proje başlangıç tarihini giriniz (yyyy-MM-dd): ");
DateTime baslangic = DateTime.Parse(Console.ReadLine());

Console.Write("Proje bitiş tarihini giriniz (yyyy-MM-dd): ");
DateTime bitis = DateTime.Parse(Console.ReadLine());

if (bitis <= baslangic)
{
    Console.WriteLine("Hata: Bitiş tarihi başlangıç tarihinden sonra olmalıdır.");
}
else
{
    Console.Write("Proje toplam fiyatını giriniz: ");
    decimal fiyat = decimal.Parse(Console.ReadLine());

    TimeSpan sure = bitis - baslangic;
    int gunSayisi = sure.Days;

    decimal gunlukUcret = fiyat / gunSayisi;

    Console.WriteLine($"Proje süresi: {gunSayisi} gün");
    Console.WriteLine($"Günlük ücret: {gunlukUcret:0.00} TL");
}

TL;DR

  • DateTime bir anı temsil eder, TimeSpan zaman aralığını tutar.
  • Now ve UtcNow ile güncel zamanı alabilirsiniz.
  • AddDays, AddMonths, AddYears ile tarih üzerinde işlem yapılır.
  • İki tarih farkı TimeSpan ile bulunur.
  • Tarih karşılaştırmaları >, <, == veya Compare ile yapılabilir.
  • ToString ile özel formatlarda tarih yazdırılabilir.