Разница между UTC и стандартным временем GMT в .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 Standard Time эквивалентны.


Обновить

При дальнейшем тестировании я считаю, что следующие эквиваленты:

“УНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ”

“Время по Гринвичу”

«Стандартное время Марокко»

Принимая во внимание, что в течение летних месяцев следующее:

“GMT Стандартное время”

Может быть, мой вопрос должен быть, почему «Гринвичское среднее время» и «Стандартное время по-умолчанию» разные?

Окончательное обновление

GMT не регулируется для летнего времени (DST). Вы можете услышать это из уст лошади на этом веб-сайте.

Добавьте эту строку кода, чтобы увидеть источник проблемы:

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

Выход: правда.

Это не проблема .NET, это Windows messing. Ключ реестра, который использует TimeZoneInfo, это HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones \ GMT Standard Time. Вам лучше придерживаться UTC.

[Я действительно просто поддерживаю ответ Ханса Пассана]

Мне кажется, что я смущаюсь по поводу использования термина «GMT», который, как представляется, используется для обозначения «среднего времени по Гринвичу», а также часового пояса, используемого в Великобритании / Ирландии, который переворачивается между GMT зимой и британским летним временем летом и, похоже, не имеет четко определенного названия в своем собственном праве!

Чтобы еще больше запутать вещи, я запустил образец кода из документов MSDN для TimeZoneInfo.GetSystemTimeZones и посмотрел на результат.

Я был очень удивлен, увидев следующее определение часового пояса «Стандартное время по умолчанию»

 ID: GMT Стандартное время
    Отображать имя: (UTC) Дублин, Эдинбург, Лиссабон, Лондон
    Стандартное название: GMT Стандартное время
    Название дневного света: GMT Дневное время *** Имеет летнее время ***
    Смещение от UTC: 0 часов, 0 минут
    Количество правил регулировки: 1
    Правила корректировки:
       С 01/01/0001 00:00:00 по 31/12/9999 00:00:00
       Дельта: 01:00:00
       Начинается в 01:00 в воскресенье недели 5 марта
       Заканчивается в 02:00 в воскресенье недели 5 октября

Похоже (по крайней мере, мне), что тот, кто отвечал за определение часовых поясов в Microsoft, действительно еще больше загромождал воды.

Они, очевидно, хотели описать часовой пояс, используемый в Великобритании / Ирландии, но они дали ему идентификатор, который включал термины «GMT» и UTC в идентификаторе и отображаемом имени. Я уверен, что это определение часового пояса (что бы оно ни называлось) не было UTC. Возможно, времена, которые очень похожи на UTC в течение половины года, но это все!

Разница заключается в следующем:

  • Среднее время по Гринвичу (GMT) – это термин, первоначально называемый средним солнечным временем в Королевской обсерватории в Гринвиче, Лондон. в то время как
  • Скоординированное универсальное время (UTC) (французский язык: Temps Universel Coordonné) – это временный стандарт, основанный на Международном атомном времени (TAI) с чередованием секунд, добавляемых с нерегулярными интервалами для компенсации замедления вращения Земли
  • С другой стороны, дневное свечение (DST) – это продвижение часов. Для и с сезонными изменениями, Чтобы максимально использовать дневной свет.

    "It is observed in many countries but not all" . Это может быть переменным, так как летом прошлого года некоторые страны, такие как Пакистан, решили вернуть часы на месяц позже, чем обычно.

  • World Time Zones – хороший ресурс для информации о времени в мире.

Надеюсь это поможет

Это поздний ответ, который вряд ли читает первоначальный вопросник, но люди, которые могут найти эту тему, могут найти.

Названия GMT Standard Time и GMT Daylight Time неизвестны за пределами Редмонда. Это мифические животные, которые появляются только в бестиаре под названием «Реестр Windows». В реальном мире зимой Великобритания наблюдает GMT (среднее время по Гринвичу), а летом наблюдает BST (британское летнее время). BST находится на 1 час вперед (на восток) от GMT. Европейцы вообще не говорят о «дневном свете», а «летнем времени», по крайней мере, на тех языках, которые я знаю.

Один из респондентов сказал, что следует использовать UTC, предпочитая GMT . Этот совет из Международного астрономического союза восходит к 1935 году. Его точка зрения заключалась в том, что до 1925 года GMT был отсчитан с полудня без полуночи, поэтому, хотя это было 10 лет спустя, возможность неоднозначности, возможно, сохранилась. Но сейчас это немного устарело. В течение последних 80 лет термины GMT и Universal Time были почти синонимичными. Не совсем, конечно. Но вам нужен астроном, чтобы объяснить вам разницу. Если вас беспокоят часы, а не секунды, вам, вероятно, все равно.

GMT – это гражданский хронометраж в англоязычных странах. Это не устарело. Это закреплено в законе в Великобритании, Ирландии, Канаде и даже Бельгии.

Различные вкусы Универсального времени – это астрономический хронометраж.

И, как мне кажется, гражданский хронометраж был тем, о чем говорил первоначальный вопрос.

Объект TimeZoneInfo имеющий значение .Id "GMT Standard Time" соответствует .DisplayName из "(UTC) Dublin, Edinburgh, Lisbon, London" .

Этот часовой пояс использует среднее время по Гринвичу (GMT) (UTC + 0) в зимние месяцы и британское летнее время (BST) (UTC + 1) в течение летних месяцев.

Ссылка здесь .

Часовой пояс для UTC имеет .Id "UTC" и .DisplayName of "(UTC) Coordinated Universal Time" .

Это два разных часовых пояса.

Кроме того, при просмотре списка отображаемых в часовом поясе имен в Windows:

Список часовых поясов

Значение в скобках – это просто стандартное смещение, поэтому, похоже, что есть четыре разных параметра для UTC, есть только один. Просто три других зоны используют UTC в качестве базового смещения, когда переход на летнее время не действует.

Ниже приведено обсуждение скоординированных универсальных часовых поясов . Кажется, что UTC обычно используется, когда требуется высокая точность для временного интервала. Greenwhich Meantime довольно близко и используется взад и вперед с UTC.

Надеюсь, это поможет некоторым.

  • ORA-01882: область часового пояса не найдена
  • Как преобразовать время в часовой пояс устройства iPhone?
  • Могу ли я получить часовой пояс браузера в ASP.NET или мне нужно полагаться на операции JS для извлечения информации?
  • .NET DateTime.Now возвращает неправильное время, когда изменяется часовой пояс
  • Часовой пояс с рельсами 3
  • Получение даты с на несколько часов
  • Как перевести между часовыми поясами Windows и IANA?
  • Преобразование между локальными временами и GMT / UTC в C / C ++
  • Список идентификаторов Timezone для использования с FindTimeZoneById () в C #?
  • Как получить текущий часовой пояс MySQL?
  • linux конвертировать время (для разных часовых поясов) в UTC
  • Давайте будем гением компьютера.