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


Обновление

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

"UTC"

"Среднее время по Гринвичу"

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

В то время как в течение летних месяцев различное:

"Стандартное время по умолчанию"

Возможно, мой вопрос должен быть, почему разные термины "время по Гринвичу" и "стандартное время по умолчанию"?

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

Ответ 1

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

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

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

Выход: True.

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

Ответ 2

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

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

Чтобы еще больше запутать вещи, я запустил код примера из MSDN docs для 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, действительно еще больше загромождал воды.

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

Ответ 3

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

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

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

  • Мировые часовые пояса является хорошим ресурс для современного времени информации по всему миру.

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

Ответ 4

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

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

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

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

Различные вкусы Универсального времени относятся к астрономическому хронометрированию.

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

Ответ 5

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

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

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

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

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

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

Time Zone List

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

Ответ 6

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

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