2015-11-04 21 views
0

在英國的時鐘改變了25/10/2015.NET DateTime.ToLocalTime是否跨DST更改持續存在?

如果我在24/10/2015跑到下面的代碼,並再次在26/10/2015,將相同的輸出產生?

從我的日期時間的東西如何在C#我假設是的,但我想仔細檢查,因爲它是我的應用程序的關鍵知識。

// January date outside of DST 
var januaryDate = new DateTime(2015, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
Console.WriteLine(januaryDate.ToLocalTime().ToString()); 

// April date inside DST 
var aprilDate = new DateTime(2015, 4, 1, 0, 0, 0, DateTimeKind.Utc); 
Console.WriteLine(aprilDate.ToLocalTime().ToString()); 
+0

當地時間意味着無論你*當前時區*爲。即使是同一臺機器上的不同用戶也可能使用不同的時區。如果您關心偏移量,請使用DateTimeOffset,而不是DateTime。如果這是關鍵的(因爲它是例如在航空旅行),檢查NodaTime以及 - 它包含了最新IANA時區數據庫,這樣你就不必猜測,BST手段(巴西或英國),或什麼是正確的達拉斯 –

+0

偏移@ PanagiotisKanavos謝謝,但不幸的是卡住了DateTime類型。假設這個問題,它是同一臺機器上的同一個用戶。 –

+0

那你就麻煩了。至少,指定日期類型(即本地或UTC),因爲現在它是未指定的並且被視爲UTC。 'ToLocalTime()'在我的機器上應用了一個2小時的偏移量,它是'+2:00'。猜猜這也回答你的問題,但也顯示你爲什麼有麻煩。除非你做** **一定的偏移量還是那種被存儲在您的日期(即數據庫,文件等)和妥善處理之前設置,你可以有意想不到的效果 –

回答

3

ToLocalTime使用當前時區的規則,而不僅僅是當前的偏移計算本地時間。調用ToLocalTime2015-01-01 00:002015-04-01 00:00將返回相同的結果呼叫是否之前或DST變化後作出的。

我當前的偏移量是+2,但調用示例代碼在第一種情況下返回1/1/2015 2:00:00 am,在第二種情況下返回1/4/2015 3:00:00 am

檢查ToLocalTime參考源顯示,返回本地時間之前被應用在特定日期的方法檢查DST是否需要:

Boolean isDaylightSavings = false; 
Boolean isAmbiguousLocalDst = false; 
Int64 offset = TimeZoneInfo.GetUtcOffsetFromUtc(this, TimeZoneInfo.Local, 
          out isDaylightSavings, out isAmbiguousLocalDst).Ticks; 

long tick = Ticks + offset; 
//various validations 
//... 
return new DateTime(tick, DateTimeKind.Local, isAmbiguousLocalDst); 
+0

不錯的一個!這幫了我很大的忙,希望能幫助別人 –

相關問題