19 Ocak 2017 Perşembe
Twitter

Anneler gününü bulma

Elinizde bir tarih bilgisi var diyelim, bu tarihin anneler günü olup olmadığını nasıl anlarsınız?

Diyelim ki elinizde şu şekilde bir tarih bilgisi var:

int YIL = 2009;
int AY = 5;
int GUN = 10;
        

Bu tarih, biz biliyoruz ki 10 Mayıs 2009'u yani anneler gününü gösteriyor, peki bunu bizim programımız nasıl bilecek?

Askerlik görevimi yerine getirirken bir program üzerinde çalışıyordum ve bu soru ile karşı karşıya kalmıştım. Yarım gün boyunca tek bir formül ile acaba verilen bir tarihin, her yıl belirli bir ayın belirli bir haftasının belirli bir gününe denk gelip gelmediğini nasıl bulabilirim diye düşünmüştüm.

Bahsettiğim her yıl belirli bir ayın belirli bir haftasının belirli bir günü olan tarihlerden birkaçı şu şekilde:

  • Anneler günü (Mayıs ayının 2. pazarı)
  • Babalar günü (Haziran ayının 3. pazarı)
  • Çevre Koruma Haftası (Haziran ayının 2. haftası)
  • Enerji Tasarrufu Haftası (Ocak ayının 2. haftası)
  • Girişimcilik Haftası (Mart ayının ilk haftası)
  • İlköğretim Haftası (Eylül ayının 3. haftası)
  • ...

O zamanlar Visual Basic ile kod yazıyordum. Oluşturduğum bu formülün C# karşılığını aşağıda bulabilirsiniz:

// Elimizdeki tarih bilgisi
// 10 Mayıs 2009 olsun
int YIL = 2009;
int AY = 5;
int GUN = 10;

// Örnek:
// her yıl mayıs ayının 2. pazarı = anneler günü
int ay = 5; // mayıs
int hafta = 2; // 2.
int gun = 7;  // pazar

// ayın 1. günü hangi güne denk geliyor?
// burada 0=paz, 1=pzts,... 6=cmts şeklinde sıralanıyor.
// formülde lazım olan 1=pzts, 2=sal, ... 7=paz
int dow = (int) new DateTime(YIL, ay, 1).DayOfWeek;
if(dow == 0) dow = 7;

if(new DateTime(YIL, AY, GUN).Equals(new DateTime(YIL, ay,
	1 - dow + (hafta - Convert.ToInt32(gun >= dow)) * 7 + gun)))
  {
     Console.WriteLine("Anneler günü bugün");
  }
 

Kim bilir belki bir gün birisinin işine yarayabilir. :)

Değerlendirme

Yazım dilinin sadeliği ve anlaşılabilirliği Puan: 0,30 (1 oy)
Yazıdaki kodların kalitesi Puan: 0,50 (1 oy)
İhtiyaca cevap verme Puan: 0,30 (1 oy)
Tavsiye edilebilirlik Puan: 0,75 (1 oy)
Genel değerlendirme Puan: 0,80 (1 oy)
Puanlamalar 5 üzerindendir.
  • Site Yorumları
  • Facebook Yorumları Facebook Yorumları
Yeni yorum yaz Toplam: 2, Onay bekleyen: 0.
  1. Devrim Altınkurt

    Bunu c# ile yapmak gayet kolay. Şöyle ki:

    // örnek: ben 4 temmuz 1979 doğumluyum
    TimeSpan ts = DateTime.Today.Subtract(new DateTime(1979, 7, 4));
    Response.Write(ts.Days);
    // 11079 gün geçmiş doğumumdan :)))

    Algoritmik nasıl hesaplanır diye soruyorsan o ayrı bir konu.
    İstersen onu da yazarım.

  2. güven yıldırım

    benim bir sorum olacaktı.gün ay yıl olarak doğum tarihi girildiğinde doğdumuz günden bugüne kadar kaç gün geçti.mesala 12.10.2008 bününün tarihi 12.10.2009 365 die textboxa kazacak