簡體   English   中英

.NET 中 UTC 和 GMT 標准時間的區別

[英]Difference between UTC and GMT Standard Time in .NET

在 .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。

[我真的只是在支持 Hans Passant 的回答]

在我看來,對術語“GMT”的使用感到困惑,該術語似乎用於表示“格林威治標准時間”以及英國/愛爾蘭使用的時區 - 在冬季的格林威治標准時間和英國夏令時間之間轉換在夏天,它本身似乎沒有一個明確的名字!

為了讓事情更加混亂,我運行了MSDN 文檔中 TimeZoneInfo.GetSystemTimeZones的示例代碼並查看了輸出。

我很驚訝地看到以下“GMT 標准時間”時區的定義

ID: GMT Standard Time
   Display Name:  (UTC) Dublin, Edinburgh, Lisbon, London
   Standard Name:                       GMT Standard Time
   Daylight Name:                       GMT Daylight Time   ***Has Daylight Saving Time***
   Offset from UTC:                       0 hours, 0 minutes
   Number of adjustment rules:                          1
   Adjustment Rules:
      From 01/01/0001 00:00:00 to 31/12/9999 00:00:00
      Delta: 01:00:00
      Begins at 01:00 on Sunday of week 5 of March
      Ends at 02:00 on Sunday of week 5 of October

似乎(至少對我而言)負責在 Microsoft 中定義時區的人在這里真的把水弄得更混亂了。

他們顯然想描述在英國/愛爾蘭使用的時區,但他們給了它一個 ID,在 ID 和顯示名稱中包含術語“GMT”和 UTC。 我相當確信這個時區定義(無論它應該叫什么)不是UTC。 它可能有半年與 UTC 非常相似的時間,但僅此而已!

這是一個遲到的回復,原始提問者不太可能閱讀,但谷歌搜索此主題的人可能會找到。

GMT 標准時間GMT 夏令時的名稱在雷德蒙德以外是未知的。 它們是只出現在名為 Windows 注冊表的動物寓言中的神話動物。 在現實世界中,英國在冬天遵守 GMT(格林威治標准時間),在夏天遵守 BST(英國夏令時)。 BST 比 GMT 提前 1 小時(向東)。 歐洲人一般不談論“夏令時”而是“夏令時”,至少在我知道的語言中是這樣。

一位受訪者表示應該優先使用UTC而不是GMT 這個來自國際天文學聯合會的建議可以追溯到 1935 年。它的要點是,在 1925 年之前,格林威治標准時間是從中午而不是午夜開始計算的,所以即使是 10 年后,歧義的可能性仍然存在。 但是現在有點過時了。 在過去的 80 年里,GMT 和世界時這兩個術語幾乎是同義詞。 當然不完全是。 但是您需要一位天文學家來向您解釋其中的區別。 如果您關心小時,而不是秒,您可能不會在意。

GMT 是關於英語國家的民用計時。 它並沒有過時。 它被載入英國、愛爾蘭、加拿大甚至比利時的法律。

世界時間的各種風格都是關於天文計時的。

我認為,民用計時就是最初的問題。

區別如下:

  • 格林威治標准時間 (GMT)是一個術語,最初指的是倫敦格林威治皇家天文台的平均太陽時。 然而
  • 協調世界時 (UTC) (法語:Temps Universel Coordonné)是一種基於國際原子時 (TAI) 的時間標准,並以不規則的間隔添加閏秒以補償地球的緩慢自轉
  • 另一方面,夏令時 (DST)是隨着季節變化而推進時鍾,以最大限度地利用日光。

    "It is observed in many countries but not all" 這可能是可變的,因為去年夏天,巴基斯坦等一些國家決定比平時晚一個月恢復時鍾。

  • World Time Zones是獲取全球最新時間信息的好資源。

希望這可以幫助

“GMT標准時間” = 英國時間(如果是英國的夏季,則冬季為 GMT+0 或 GMT+1。)

基本上,如果您想將 UTC 轉換為英國時間,請使用“GMT標准時間

普通的舊“GMT”(或格林威治標准時間)或多或少是 UTC,給出或花費幾毫秒。 它不會針對英國的夏令時進行調整,因此我們從未有過使用案例。

所有其他答案都以非常冗長的方式解釋了這一點,其中一些答案具有誤導性或矛盾性,因此我想提供另一個答案,希望它可以避免某些人的閱讀和困惑。

具有"GMT Standard Time".IdTimeZoneInfo對象對應於"(UTC) Dublin, Edinburgh, Lisbon, London".DisplayName

該時區在冬季使用格林威治標准時間 (GMT) (UTC+0),在夏季使用英國夏令時間 (BST) (UTC+1)。

參考這里

UTC 時區的.Id"UTC".DisplayName"(UTC) Coordinated Universal Time"

它們是兩種不同的時區設置。

此外,在查看 Windows 中的時區顯示名稱列表時:

時區列表

括號中的值只是標准偏移量,因此雖然看起來 UTC 有四種不同的設置,但實際上只有一種。 只是其他三個區域在夏令時不生效時使用 UTC 作為它們的基本偏移量。

這里是Coordinated Universal Timezones的討論。 當時間范圍需要高精度時,似乎通常使用UTC。 Greenwhich 同時非常接近並且與 UTC 來回使用。

希望這對一些人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM