2013-05-08 50 views
17

On msdn it is defined for Unspecified Kind as:日期時間未指定類

kind

所以,如果一種是未指定的日期時間爲UTC,但在同一頁(給定的例子)上:

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(); 
    } 
    } 
} 

給輸出:

未指定:...... 2005年5月6日下午2時34分42秒,類=未指定

ToLocalTime:2005年5月6日上午07點34分42秒,類=本地

ToUniversalTime :2005年5月6日下午9時34分42秒,類= UTC

所以,問題我有這個,如果未指定UTC是爲什麼UTC爲UTC轉換改變DateTime對象的價值?

回答

42

不,未指定和UTC非常不同 - 您引用的頁面來自ToLocalTime。問題是,如果您使用「未指定」DateTime調用ToLocalTime,則該值將被視爲,就好像它是以UTC形式的一樣。如果使用「未指定」 DateTimeToUniversalTime

同樣地,則該值將被視爲彷彿它是系統中的本地時區。

坦率地說,這種事情是爲什麼I dislike DateTime rather a lot。如果我是你,我會用Noda Time來代替,它將概念完全分解成不同的類型,消除了很多混淆。 (有更多類型要知道,但每個代表一個概念。)雖然我顯然有偏見...

3

DateTimeKind.Unspecified在您不希望時間轉換的情況下很有用到另一個當地時間。

以服務器應用程序爲例,它顯示客戶端應用程序中服務器的當前時間。如果您沒有在服務器上指定DateTimeKind.Unspecified,並且當前時間通過WCF調用來檢索,那麼當在客戶端應用程序中調用.ToString時,它將自動轉換爲當地時區(如果它們不同)。