{Merhaba Dünya Ben Emre Kıyak}

 





C#'da tarih zaman formatını biçimlendirmek

Share |


Bugün hocamdan gelen bir talebi değerlendirerek blog üzerinde bulunan tarihleri "halk için sanat yapma" felsefesine göre yeniden biçimlendirdim :)

Örneğin 27.05.1985 12.30 şeklinde (doğum tarih ve saatim olur) bir yazım tarzı yerine 27 Mayıs 1985 öğle 12.30 yazmayı nasıl yaparız hep birlikte görelim.

Blog girdilerimizin tarihleri veritabanında defaul olarak GetDate(); fonksiyonu ile eklenmektedir ve yukarıda bahsettiğim formatta bir insert yapılıyor. DateTime structı ile (dikkat edin class demedim takip edenler anladı) gelen tarih datasının içini evire çevire bir güzel şekillendirebiliriz. Kodları aşağıda açıklamalarıyla veriyorum buyrun :

public class TimeConvert
{
       public static string Convert(DateTime d)
       {
        //Dışarıdan datetime tipinde bir parametre alıyoruz
        //Gelen değerin gün-ay-yıl bilgilerini alıyoruz
        //Ayrıca haftanın hangi günü olduğu bilgisini de alıyoruz
        string gun = d.Day.ToString();
        string gun_ing_adi = d.DayOfWeek.ToString();
        string ay = d.Month.ToString();
        string yil = d.Year.ToString();
        string dakika = d.Minute.ToString();
        int saat = d.Hour;
 
        //Ay bilgisinin Türkçe karşılığı hesaplanır
        string ay_adi = string.Empty;
        switch (ay)
        {
            case "01": ay_adi = "Ocak";
                break;
            case "02": ay_adi = "Şubat";
                break;
            case "03": ay_adi = "Mart";
                break;
            case "04": ay_adi = "Nisan";
                break;
            case "05": ay_adi = "Mayıs";
                break;
            case "06": ay_adi = "Haziran";
                break;
            case "07": ay_adi = "Temmuz";
                break;
            case "08": ay_adi = "Ağustos";
                break;
            case "09": ay_adi = "Eylül";
                break;
            case "10": ay_adi = "Ekim";
                break;
            case "11": ay_adi = "Kasım";
                break;
            case "12": ay_adi = "Aralık";
                break;
        }
 
        //Gün bilgisinin Türkçe karşılığı hesaplanır
        string gun_adi = string.Empty;
        switch (gun_ing_adi)
        {
            case "Sunday": gun_adi = "Pazar";
                break;
            case "Monday": gun_adi = "Pazartesi";
                break;
            case "Tuesday": gun_adi = "Salı";
                break;
            case "Wednesday": gun_adi = "Çarşamba";
                break;
            case "Thursday": gun_adi = "Perşembe";
                break;
            case "Friday": gun_adi = "Cuma";
                break;
            case "Saturday": gun_adi = "Cumartesi";
                break;
        }
 
        //Saat değerine göre gece-sabah-öğle-akşam vakitleri hesaplanır
        string saat_degeri = string.Empty;
 
        if (saat > 0 && saat <= 6)
        {
            saat_degeri = "gece";
        }
        else if (saat > 6 && saat < 12)
        {
            saat_degeri = "sabah";
        }
        else if (saat >= 12 && saat < 18)
        {
            saat_degeri = "öğleden sonra";
        }
        else if (saat >= 18)
        {
            saat_degeri = "akşam";
        }
 
        //En son geriye dönülecek değer ayarlanır
        string son_deger = gun + " " + ay_adi + " " + yil + " " + gun_adi + " " + saat_degeri + " " + saat.ToString() + ":" + dakika;
 
        return son_deger;
 
       }
}

Datatable'ın bir satırından aldığım Tarih değerini aşağıdaki gibi label kontrolüne basarım.

lblTarih.Text = TimeConvert.Convert(Convert.ToDateTime(dt.Rows[0]["Tarih"]));

Eğer o tarihte eklenen verinin tarihi ile birlikte gelen IP değerinden dünya üzerindeki konumunun tespit edilip o an hava sıcaklığının ne olduğu bilgisini de kaydedip "sıcak bir yaz akşamı" veya "ılık bir londra sabahı" gibi ifadelerle veriyi biçimlendirmek sizlerin takdiridir. Artık halk için sanat mı olur fantezi mi onu bilemem :) 

İyi çalışmalar :))


Netkolog Yazılım Danışmanlık'ın sponsorluğunda yayınlanan bu internet sitesinin sunucuları Türkiye lokasyonlu olduğu için gelen tarih bilgisinden eminiz. Ama aşağıda hocamızın dediği gibi eğer yurt dışında farklı bir saat diliminde yer alan ülkede olsaydı sunucumuz o zaman gelen tarih bilgisini kendi yerel formatımıza göre göstermemiz gerekirdi. Bununla ilgili örnek verelim :

string tarih = Convert.ToDateTime(rw["Tarih"]).ToString("d MMMM",CultureInfo.CreateSpecificCulture("tr-TR"));

Örneği çalıştırdıktan sonra görüyoruz ki bu kadar takla atmaya lüzum yokmuş :) Kullanmayınca haberimiz olmuyo işte. .NET sen nelere kadirsin. Olsun ama ben burda zaten switch case yapısının daha iyi pekiştirilmesi için örnek vermiştim :D


23 Aralık 2009 Çarşamba akşam 20:11

Mesajınızı yazabilirsiniz


Rumuz :  
 
Email :   
  
Mesaj :  
Bu konuya abone olmak ister misiniz ?

Güvenlik kodunu göremiyorsanız sayfayı yenileyin.
Güvenlik Kodu :





Mesajlar


Aykut ÇALIŞKAN
24 Aralık 2009 Perşembe gece 1:45
datetime functionunu toString("{D:d}") şeklinde formatlayarak tümünüTürkiye ye çevire bilirdin. sonrasında da gelen tarih değeriparçalanabilir ve "halk için " tarih formatlana bilirdi. ayrıntılıbilgi için yardımcı olması açısından şu linke e birbakabiliriz.(http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx )türkiye için tr-TR dir. ayrıca sana gelen datetime parametresiispanyolcada ayarlanmış olabilir. ozaman senin function exceptionfırlatacaktır.


Aykut ÇALIŞKAN
24 Aralık 2009 Perşembe sabah 8:21
bu harkulade switch case yapısı örneği için çok tşk ederim. ayrıca yeni yöntem ve eleştirilere açık olduğun için seni tüm kalbimle tebrik ederim.