Ошибка TimeZoneInfo? - PullRequest
       20

Ошибка TimeZoneInfo?

1 голос
/ 04 июля 2011

У меня проблемы с преобразованием времени из Лондона (UTC / UTC + 1) в восточное время США (UTC-5 / UTC-4).

С кодом, работающим на лондонской машине во время фазы UTC + 1,

TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now.ToUniversalTime(), TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));

Это будет правильно конвертировать 14:25:00 в 06:25:00 из UTC + 1 в UTC-7

Однако, если часовой пояс восточный, США

TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now.ToUniversalTime(), TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"));

Это будет неправильно преобразовать 14:25:00 в 08:25:00 из UTC + 1 в UTC-4

Кроме того,

TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time").SupportsDaylightSavingTime

возвращает false, в то время как

TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time").SupportsDaylightSavingTime

возвращает истину.

Это работает под .NET 3.5. Есть мысли?

1 Ответ

0 голосов
/ 10 июля 2011

Это действительно похоже на ошибку, либо неверную информацию о часовом поясе на платформе, на которой вы работаете .NET;или в самом .NET.На мой взгляд, вы должны получить true по восточному стандартному времени.

Если бы вы использовали базу данных tz info, я почти уверен, что вы получите менее неоднозначные результаты.Проверьте: http://www.codeproject.com/KB/dotnet/Using_time_zones_in_NET.aspx.

И узнайте больше об открытой базе данных часовых поясов здесь: http://en.wikipedia.org/wiki/Tz_database


Дополнительные мысли: Трудно сказать, в чем здесь ошибка.Взять, к примеру, восточное стандартное время.По определению это зимнее время для восточного побережья, а летом стандартное время не существует.Внезапно этот регион начинает использовать «восточное летнее время».

То же самое относится и к Центральной Европе, которая чередуется между «Центрально-европейским временем» и «Центрально-европейским стандартным временем».Соглашения о наименованиях часовых поясов действительно сбивают с толку, а также неоднозначно.Я могу только повторить, что если вы можете найти надежный API базы данных tz для вашей платформы и языка программирования: используйте его.

...