[英]ASP.NET Convert.ToDateTime(“Tue, 08 Sep 2009 13:31:00 -0500”) is off by an hour
使用ASP.NET 3.5框架,Convert.ToDateTime(“ Tue,08 Sep 2009 13:31:00 -0500”)返回時間為14:31的DateTime對象。 請注意,我在東海岸(EST -0500),所以我應該看到13:31。 我假設這與在Convert.ToDateTime中未考慮的夏令時(DST)有關。
有沒有一種優雅的方法可以解決在所有時區都可以解決的問題?
我應該知道是否有其他日期解析方法可以避免此問題?
請改用DateTimeOffset結構 :
DateTimeOffset.Parse("Tue, 08 Sep 2009 13:31:00 -0500")
它還具有采用TimeSpan結構 的構造函數 。 這應該尊重DST問題。
由於您提到了時區,因此需要研究的另一個類是TimeZoneInfo類 。 這些都是.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
如果您位於東海岸,並且由於目前是東海岸的夏令時,您的時間應該為Tue, 08 Sep 2009 13:31:00 -0400
。 在夏時制期間,東海岸的偏移量變為-04:00
。
快速檢查當前偏移量的方法是
TimeSpan offset = TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now);
因此,您實際上是在解析錯誤的值。 東海岸的日期不可能是9月8日的-05:00。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.