2012-01-10 75 views
2

我想知道是否有辦法讓DateTime對象在設置爲GMT時間的操作系統上獲取所有正確的屬性。不只是改變時間。有沒有辦法讓DateTime.IsDaylightSavingTime在GMT/UTC時間的機器上工作?

現在即時通訊做的事情是:

DateTime f = new DateTime(2012, 8, 1); //A date on summer 

DateTime f2 = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(f, TimeZoneInfo.Local.Id, "Central Europe Standard Time"); 

var isSummer = f2.IsDaylightSavingTime(); //It always returns false if the OS is on GMT 

而且它改變了時間&日期,使GMT成爲中歐標準時間就好了,但IsDaylightSavingTime功能無法正常工作。它總是返回false,因爲我在系統上使用了GMT,但我認爲它不應該是因爲我爲中歐創建了DateTime

有沒有辦法使DateTime對象f2真的是本地的,並且明白如果它的八月和歐洲中心它應該返回true而不是false?

我知道如果我在機器上使用本地時間,它會工作正常,但我不能更改服務器上的GMT時間。我很想去,但我不能。 :-)

+0

當然可以用IsDayLightSavingTime方法,我要澄清我不是擔心八月,我不想讓我自己的功能知道是否是小時改變的確切日子。即使這樣,它依賴於位置,因爲我使用的數據是在不同時區的航班。 – H27studio 2012-01-10 17:12:13

+0

相關:http://stackoverflow.com/q/2532729/1583 – Oded 2013-03-15 10:14:04

回答

7

DateTime.IsDayLightSavingTime如果類是本地的還是未指定返回true,和DateTime的這個實例的值是夏令時間範圍內對當前時區

即DateTime對象檢查系統時區,因爲UTC不支持夏令時,所以它返回true。

如果你想驗證,如果在夏令時區的時間下跌,然後在的TimeZoneInfo

DateTime f = new DateTime(2012, 8, 1); //A date on summer 
TimeZoneInfo tzf2=TimeZoneInfo.FindSystemTimeZoneById("Central Europe Standard Time"); 
DateTime f2 = TimeZoneInfo.ConvertTime(f, tzf2); 
var isSummer = tzf2.IsDaylightSavingTime(f2); 
+4

對不起,我們需要使用tzf2.IsDaylightSavingTime(f2)來驗證它是否爲DLSTime。 – Manas 2012-01-11 09:17:38

+1

編輯你的答案,如果它是錯誤的。 – 2014-05-13 10:20:44

相關問題