Dot-Net

.NET 中 UTC 和 GMT 標準時間之間的差異

  • February 18, 2010

在 .NET 中,以下語句返回不同的值:

Response.Write(
 TimeZoneInfo.ConvertTime(
   DateTime.Parse("2010-07-01 5:30:00.000"),
   TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"),
   TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"))
 );
// displays 7/1/2010 1:30:00 PM

..和這個…

Response.Write(
 TimeZoneInfo.ConvertTime(
   DateTime.Parse("2010-07-01 5:30:00.000"),
   TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"),
   TimeZoneInfo.FindSystemTimeZoneById("UTC"))
 );
// displays 7/1/2010 12:30:00 PM

為什麼是這樣?我認為 UTC 和 GMT 標準時間是等價的。


更新

經過進一步測試,我發現以下內容似乎是等效的:

“世界標準時間”

“格林威治標準時間”

“摩洛哥標準時間”

鑑於夏季月份的情況有所不同:

“格林威治標準時間”

也許我的問題應該是,為什麼“格林威治標準時間”和“格林威治標準時間”不同?

結束更新

GMT 不針對夏令(DST) 進行調整。你可以在這個網站上從馬的嘴裡聽到它。

添加這行程式碼可以查看問題的根源:

 Console.WriteLine(TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time").SupportsDaylightSavingTime);

輸出:真。

這不是 .NET 問題,而是 Windows 搞砸了。TimeZoneInfo 使用的系統資料庫項是 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT 標準時間。你最好堅持使用UTC。

引用自:https://stackoverflow.com/questions/2292334