2009-09-08 41 views
1

使用ASP.NET 3.5框架Convert.ToDateTime(「Tue,2009年9月8日13: 31:00 -0500「)返回時間爲14:31的DateTime對象。請注意,我在東海岸(EST -0500),所以我應該看到13:31。我假設這與夏令時(DST)沒有考慮在Convert.ToDateTime中有關。ASP.NET Convert.ToDateTime(「Tue,2009年9月8日13:31:00 -0500」)已關閉一小時

是否有一個優雅的方法來糾正這個問題,將跨越所有時區?

是否有不同的日期解析方法,我應該知道這可以避免這個問題?

回答

1

使用DateTimeOffset structure代替:

DateTimeOffset.Parse("Tue, 08 Sep 2009 13:31:00 -0500") 

它還has a constructor,需要一個TimeSpan structure。這應該尊重DST問題。

既然您提到了時區,另一類需要關注的是TimeZoneInfo class。這些在.NET 3.5中都是新的。從這個MSDN頁面返回的例子:

Time in Eastern Daylight Time zone: 9/8/2009 3:25:58 PM 
    UTC Time: 9/8/2009 7:25:58 PM 
Time in Tokyo Daylight Time zone: 9/9/2009 4:25:58 AM 
    UTC Time: 9/8/2009 7:25:58 PM 
0

如果你是在東海岸,並且由於它是目前夏令時在東海岸,你的時間應該是Tue, 08 Sep 2009 13:31:00 -0400。在夏令時期間,東海岸的偏移量變爲-04:00

一個快速的方法來檢查當前的偏移量是

TimeSpan offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now); 

所以你實際上是解析錯誤值。東海岸的日期不可能在9月8日的-05:00。

相關問題