Часовой пояс Лондона

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

Итак, короче

задача может выполняться в 16:00 по лондонскому времени зимой и летом.

Я использовал центральное стандартное время для установки задачи для Нью-Йорка, но вижу, что моя задача выполняется на час позже, так как неделю назад в Нью-Йорке началось летнее время.

Кто-нибудь знает, существуют ли такие отдельные часовые пояса для .Net, которые представляют местное время для города?

Я не хочу использовать BST и GMT, так как мне нужно будет настроить его дважды.

Надеюсь, мой вопрос имеет смысл.


person Robert Dinaro    schedule 21.03.2019    source источник
comment
Что именно вы подразумеваете под «независимо от перехода на летнее время»? В некоторых частях вопроса кажется, что вы действительно хотите соблюдать переход на летнее время, но в примере с Нью-Йорком но звучит так, будто вы не хотели этого. Идентификаторы часовых поясов Windows очень сбивают с толку - то, что в названии указано стандартное, не означает, что это только стандартное время :(   -  person Jon Skeet    schedule 21.03.2019
comment
Привет, Джон, я думаю, что смог показать свое намерение на примере Нью-Йорка (не столько объясняя свой вопрос). Итак, у нас есть задача, которая обращается к различным поставщикам финансовых услуг и извлекает данные за определенный час, и данные могут различаться в зависимости от часа. Данные публикуются по местному времени; поэтому для Лондона он публикуется каждый час, но нас интересуют только отдельные часы, например. 16:00, и если мы случайно получим данные за 15:00 или 17:00, наши расчеты будут неверными.   -  person Robert Dinaro    schedule 22.03.2019
comment
@ Джон - да, в случае Нью-Йорка - восточное стандартное время не работало (как вы указали - слово «стандартное» меня обмануло).   -  person Robert Dinaro    schedule 22.03.2019
comment
@RobertDinaro. Возможно, вы захотите прочитать вики с тегом timezone. В базе данных часовых поясов Microsoft Windows есть раздел, в котором объясняется именно эта проблема с именами.   -  person Matt Johnson-Pint    schedule 22.03.2019
comment
Я все еще не понимаю, чего ты хочешь. Если вам нужно фактическое наблюдаемое местное время, тогда TimeZoneInfo для восточного стандартного времени должно работать для вас. Было бы очень полезно, если бы вы предоставили минимально воспроизводимый пример, демонстрирующий проблему.   -  person Jon Skeet    schedule 22.03.2019


Ответы (1)


Идентификатор часового пояса Windows для Лондона: "GMT Standard Time". Да, название сбивает с толку, но оно действительно правильно представляет GMT и BST, используемые в Великобритании, и переходы между ними.

Однако, если вы используете .NET Core в ОС, отличной от Windows, вместо этого вам нужно будет использовать идентификатор часового пояса IANA "Europe/London".

Оба они работают с методом TimeZoneInfo.FindSystemTimeZoneById в соответствующих операционных системах.

Наконец, если вы разрабатываете свой код для кроссплатформенности, вы можете использовать мою библиотеку TimeZoneConverter. , что позволит вам использовать любую форму идентификатора на любой платформе.

person Matt Johnson-Pint    schedule 21.03.2019
comment
Стандартное время по Гринвичу будет тщательно протестировано в ближайший понедельник, так как в настоящее время мы собираем данные в 16:00 по лондонскому времени и наступят в понедельник, я надеюсь, что это продолжится. - person Robert Dinaro; 22.03.2019
comment
Однако я пытаюсь получить список унифицированных часовых поясов для каждого региона, в котором соблюдается переход на летнее время (перемещение часов вперед или назад). Поэтому, когда я настраиваю свою задачу; Я использую этот единый часовой пояс для данного города, такого как Нью-Йорк, а затем данные извлекаются, скажем, в 16:00 каждый день. - person Robert Dinaro; 22.03.2019
comment
приложение написано с использованием .Net Standard и работает на сервере Windows. - person Robert Dinaro; 22.03.2019
comment
Я действительно не уверен, что вы имеете в виду под унифицированными часовыми поясами. Если вам нужен список всех часовых поясов, TimeZoneInfo.GetSystemTimeZones() подойдет. Затем вы можете использовать функцию TimeZoneInfo.IsDaylightSavingTime, чтобы проверить, является ли это летним временем для определенного момента времени. Чего вы не можете сделать, так это предположить, что летнее время работает одинаково во всем мире — это не так. - person Matt Johnson-Pint; 22.03.2019
comment
Кроме того, если вам нужен список всех часовых поясов IANA, он есть в Википедии здесь. Если вы хотите узнать, как они соотносятся с часовыми поясами Windows, в CLDR есть данные здесь. - person Matt Johnson-Pint; 22.03.2019
comment
И, наконец, если вы пишете для .NET Standard, возможно, вам лучше использовать часовые пояса IANA, даже если вы работаете в Windows. Кто знает — однажды вы, возможно, захотите развернуться на серверах Linux. Вы можете использовать их напрямую с Noda Time (через DateTimeZoneProviders.Tzdb) или с TimeZoneConverter (через TZConvert.GetTimeZoneInfo). - person Matt Johnson-Pint; 22.03.2019
comment
спасибо, Мэтт - я думаю, что стандартное время по Гринвичу вводит меня в заблуждение, полагая, что существуют часовые пояса, которые отражают текущее/местное время данного региона. Как вы сказали, и я заметил это по восточному стандартному времени, это предположение было неверным. Я изучу часовые пояса IANA. - person Robert Dinaro; 22.03.2019