2014-02-22 72 views
2

下面是一個簡單的代碼:哪裏DateTime.ToLocalTime()獲取偏移

System.DateTime dt = new DateTime(635267088000000000); 
Console.WriteLine(dt.ToLocalTime()); 

我已經改變了位置,格式和系統區域設置在Windows的「區域和語言設置」,但結果卻事與願違改變。

我已重新啓動計算機。我正在使用Windows 7.

回答

3

系統Timzone設置位於「日期和時間」控制面板中,而不是「區域和語言」控制面板(並且令人困惑的是,這也是鍵盤語言設置的位置,而不是鍵盤控制面板)。

+1

謝謝。它幫助到我 ! – demas

2

奇怪...您提供的代碼無法識別本地信息,因爲您沒有指定本地類型。爲了讓在轉換到本地或世界時的優勢,你必須指定一種DateTime對象是這樣的:

DateTime dtUtc = new DateTime(DateTime.UtcNow.Ticks, DateTimeKind.Utc); 
DateTime dtLocal = dtUtc.ToLocalTime(); 
Console.WriteLine("{0} - {1}", dtUtc, dtLocal); 

這將輸出類似這樣:

22/2/2014 10:25:59 - 22/2/2014 14:25:59 

請注意,如果您使用DateTime.NowDateTime.UtcNow他們已經分別有DateTimeKind.LocalDateTimeKind.Utc

DateTime dt = DateTime.Now; 
Console.WriteLine(dt.Kind); 
dt = DateTime.UtcNow; 
Console.WriteLine(dt.Kind); 
dt = new DateTime(635267088000000000); 
Console.WriteLine(dt.Kind); 

輸出是:

Local 
Utc 
Unspecified 

探索這個例子。

DateTime dt = new DateTime(635267088000000000); // same as DateTimeKind.Unspecified 
DateTime dtUtc = dt.ToUniversalTime(); 
DateTime dtLocal = dt.ToLocalTime(); 
Console.WriteLine("{0} - {1} - {2}", dt, dtUtc, dtLocal); 

dt = new DateTime(635267088000000000, DateTimeKind.Local); 
dtUtc = dt.ToUniversalTime(); 
dtLocal = dt.ToLocalTime(); 
Console.WriteLine("{0} - {1} - {2}", dt, dtUtc, dtLocal); 

dt = new DateTime(635267088000000000, DateTimeKind.Utc); 
dtUtc = dt.ToUniversalTime(); 
dtLocal = dt.ToLocalTime(); 
Console.WriteLine("{0} - {1} - {2}", dt, dtUtc, dtLocal); 
+0

謝謝。我會檢查代碼。 – demas

+0

我不知道爲什麼,但你的例子給我「22.02.2014 11:55:47 - 22.02.2014 17:55:47」 – demas

+0

如果我使用DateTimeKind.Local作爲第二個參數,那麼dtUtc和dtLocal將會是一樣。看起來像DateTimeKind.Utc是第二個參數的默認值。 – demas