TimeSpan ile şu kadar saniye, dakika, saat ve gün olayı

TimeSpan iki zaman arasındaki farkı bize veren bir fonksiyon. Kullanımıda
gerçekten çok basit. İşlemin sonunda bize milisaniye, saniye, dakika, saat ve gün değerlerini double tipinde geri döndürüyor.
Facebook, friendfeed veya twitter gibi sitelerde, bu içerik bir kaç saniye önce
eklendi yada 5 saat önce yüklendi gibi mesajları görmüşsünüzdür, TimeSpan
kullanarak bu işlemin nasıl yapıldığına bir göz atalım.

protected void Page_Load(object sender, EventArgs e)
{
    DateTime hesaplanacakZaman = new DateTime(2010, 05, 15, 21, 23, 00);
    Response.Write(neZaman(hesaplanacakZaman));
}

public string neZaman(DateTime d) {
    TimeSpan tS = DateTime.Now-d;
    int dakika = (int)tS.TotalMinutes;
    int saat = (int)tS.TotalHours;
    int gun = (int)tS.TotalDays;
    string strTemp;
    if (dakika < 1)
    {
        strTemp = "bir kaç saniye önce";
    }
    else if (dakika < 60)
    {
        strTemp = dakika+" dakika önce";
    }
    else if (saat < 24)
    {
        strTemp = saat+" saat önce";
    }
    else
    {
        strTemp = gun+" gün önce";
    }
    return strTemp;
}

Gördünüz gibi gayet basit ve anlaşılır bir yöntem. Sonraki yazıda görüşmek üzere hoşçakalın..

MSSQL 2005 de Tarih Formatını Değiştirme

Evet yine sql yine tarih formatı :) Bilindiği üzere veritabanın kendi tarih formatı bulunuyor ve bu format varsayılan olarak us_english olarak geliyor. Bilmeyen arkadaşlar için bu tarih formatı Ay-Gün-Yıl (mdy) şeklinde, bizim kullandığımız düzen ise, Gün-Ay-Yıl (dmy). Bu çoğu zaman verileri listelerken, süzerken veya veritabanına kayıt eklerken sizi türlü türlü cambazlıklara iten, sürekli karşınıza farklı sıkıntılarla gelen bir handikap durumudur. Geçenlerde burada bir kısmından bahsetmiştim. Bu olayın sanıyorum ki en kesin çözümü sql serverin ayarlarını isteğimiz doğrultusunda düzenlemek.

Olayın mantığını anlamak açısından olayı biraz uzatmak istiyorum. Sql editörümüzü açıp “select * from sys.syslanguages” yazıp çalıştırdığımızda karşımıza diller ve ayarları geliyor. Kayıtları gördüğünüzde olayı zaten anlıyorsunuz. (Şekil-1)

Şekil-1 (kayıtların bir bölümü)

Sonrasında “select name, language from master.dbo.syslogins” dediğimizde karşımıza kullanıcıların kullandıkları varsayılan dilleri görebiliyoruz. Bu şu demek kullanıcıların dillerini kişiselleştirmemiz mümkün olabiliyor. (Şekil-2)

Şekil – 2

Varsayılan dili öğrenmek için ise “select @@Language, @@Langid” cümlesinizi çalıştırıyoruz. (Şekil 3)

Şekil – 3

Varsayılan dili Türkçe yapmak için “EXEC sp_configure ‘default language’, 22 RECONFIGURE” cümlesini çalıştırıyoruz. Buradaki 22 Tükçe‘ nin langid si, yani “select name, language from master.dbo.syslogins” sorgusunu çalıştırdığımızda karşımıza gelen kayıtlardaki Türkçe‘ nin kaşısındaki langid değeri. Bu çözüm olması gereken şekli, istersek hiç bir şeye bulaşmadan “select * from sys.syslanguages” sorgusunu çalıştırıp elle formatları, gün ve ay isimlerini elle değiştrimemiz de mümkün. Bir yazının daha sonuna geldik, herkese güzel ve mutlu günler dilerim.

MSSQL Tarih Saat Problemi ve Çözümü

Arkadaş işin içine tarih saat girince heryer karışıyor. Belki sadece bana oluyordur ama araştırdığım kadarıyla bu sıkıntıları herkes yaşıyor. Sıkıntıların başında tarihleri karşılaştıramama geliyor. Özellikle 29.01.2009 15:38:39 şeklindeki tarih saat formatındaki verilerde sürekli problem oluşuyor.

Veritabanındaki DateTime veri türündeki bir alana örneğin; DateTime.Now.ToString(“MM.dd.yyyy hh:mm:ss”) şeklinde verileri girdiğimizde, bu formattaki farklı bir tarihle karşılaştırma yapmak istediğimizde sıkıntı çıkıyor. Örnek sql sorgusu Select * from Tablo_Adi Where DateTime_Alan_Adi > ‘”+DateTime.Now.ToString(“MM.dd.yyyy hh:mm:ss”)+”‘ mantıken problem olmaması gerekiyor çünki yazdığımız verileri karşılaştırıyoruz, ama gelin görünki sapıtan bir sorgu.

Çözüm kısmında karşımıza sql in getDate() fonksiyonu çıkıyor.

Öncelikle MSSQL için Date Time fonksyionlarının burada anlatıldığını belirteyim.

İzleyeceğimiz yol gayet basit. Veritabanı işlemlerinde kullanacağımız tüm tarih işlemlerini getDate() ile yapacağız.

Örnek;
Insert into Tablo_Adi (alan_adi) Values (getDate()) — bu şekilde eklediğimiz bir bilgiyi şu şekilde çok sağlıklı bir şekilde karşılaştırabiliriz.

Select * From Tablo_Adi Where alan_adi > getDate() — gördüğünüz gibi değişkenler veya programlama dilimizin tarih saat fonksiyonlarını bir kenara koyup bu işler için sql in kendisini kullanıyoruz. Esasında en mantıklısıda bu, neden bu zaman kadar bunu düşünemedim bilmiyorum. Aklıma gelmişken yukarıda verdiğim Date Time fonksiyonlarını incelerseniz tarih işlemleri için hertürlü dönüşümü yapabilirsiniz.

Örnek;
getDate()
bize böyle bir çıktı veriyor = 29.01.2009 15:00:00
DATEADD(day, 10,getDate())
dediğimizde gün sayısına 10 ekliyoruz, eğer day yerine hh yazsaydık saati 10 saat ileri alacaktık = 02.02.2009 15:00:00
DATEPART(yy,getDate())
şeklinde sadece yılı alırız = 2009

Aşağıdaki tabloda yukarıdaki örneklerdeki kısaltmaların açıklamaları bulunuyor.

Açıklama Kısaltmalar
Yıl yy, yyyy
Çeyrek qq, q
Ay mm, m
Yılın Günü dy, y
Gün dd, d
Hafta wk, ww
Haftanın Günü dw
Saat hh
Dakika mi, n
Saniye ss, s
Milisaniye ms