2013-05-08 21 views
17

On msdn it is defined for Unspecified Kind as:DateTime Tanımlanmamış Kind

Yani kind

Tür belirtilmemiş DateTime UTC olmakla ise aynı sayfada (Verilen örnek) tarih:

class Sample 
{ 
    public static void Main() 
    { 
     DateTime saveNow = DateTime.Now; 
     myDt = DateTime.SpecifyKind(saveNow, DateTimeKind.Unspecified); 
     Display("Unspecified: .....", myDt); 
    } 

    public static string datePatt = @"M/d/yyyy hh:mm:ss tt"; 

    public static void Display(string title, DateTime inputDt) 
    { 
     DateTime dispDt = inputDt; 
     string dtString; 

     dtString = dispDt.ToString(datePatt); 
     Console.WriteLine("{0} {1}, Kind = {2}", title, dtString, dispDt.Kind); 

     dispDt = inputDt.ToLocalTime(); 
     dtString = dispDt.ToString(datePatt); 
     Console.WriteLine(" ToLocalTime:  {0}, Kind = {1}", dtString, dispDt.Kind); 

     dispDt = inputDt.ToUniversalTime(); 
     dtString = dispDt.ToString(datePatt); 
     Console.WriteLine(" ToUniversalTime: {0}, Kind = {1}", dtString, dispDt.Kind); 
     Console.WriteLine(); 
    } 
    } 
} 

çıkış olarak verilmesi :

Tanımlanmamış 210

: ..... 2005/05/06 14:34:42, Tür = Tanımlanmamış

ToLocalTime: 2005/05/06 07:34:42, Tür = Yerel

ToUniversalTime : 2005/05/06 21:34:42, Tür = Utc

Yani, bu konuda var konu Tanımlanmamış neden Utc Utc dönüşüm sonra Utc ise datetime nesne değerini değiştirmek yani,?

cevap

42

Hayır, Belirtilmemiş ve UTC çok farklıdır - alıntı yaptığınız sayfa ToLocalTime'dan alınmıştır. Bunun anlamı, "belirtilmemiş" bir DateTime kullanarak ToLocalTime'u çağırırsanız,'un UTC'de olduğu gibi değer olarak değerlendirilir. sistemin yerel saat diliminde olduğu sanki

Aynı şekilde siz DateTime bir "belirtilmemiş" seçeneğini kullanarak ToUniversalTime ararsanız, o zaman değeri işlem görecektir.

Açıkçası bu tür bir şey, neden I dislike DateTime rather a lot. Eğer ben olsaydım, bunun yerine konseptleri farklı tiplere ayıran ve çok fazla karışıklığı kaldıran Noda Time kullanırdım. (Bilmekte daha fazla bilgi vardır, ancak her biri tek bir kavramdır.) Açıkça önyargılıyım ...

3

DateTimeKind.Unspecified, zamanın dönüştürülmesini istemediğiniz durumlarda kullanışlıdır başka bir yerel zamana. Örneğin, bir istemci uygulamasında sunucu için geçerli saati görüntüleyen bir sunucu uygulamasını ele alalım. Sunucuda DateTimeKind.Unspecified belirtmezseniz ve geçerli saat WCF çağrısı ile alınırsa, istemci uygulamasında .ToString çağrıldığında, farklıysa, yerel saat dilimine otomatik olarak dönüştürülür.