2011-02-07 3 views
2

Моя база данных GMT Diff для каждой страны, как GMT + 02: 00 и GMT-04: 00 Использование C# .net есть простой способ преобразования, что в реальной в часовом поясе .Net?Конвертировать GMT Diff в .Net часовой пояс?

, например. «Eastern Standard Time» или «E. Австралия Стандартное время»

благодаря

ответ

4

a часовой пояс, просто не тот, который вы хотите. Смещение UTC неоднозначно. GMT + 02: 00 является смещением

  • Jordan Стандартного время
  • GTB поясного время
  • Ближнего Востока Стандартного времени
  • Египта Standard Time
  • Сирия Стандартного время
  • Южной Африка поясного время
  • FLE Стандартное время
  • Israel Стандартное время
  • E. Европа Стандартное время

Любое, что вам нравится в частности? Вы получите их с таким выражением:

public static TimeZoneInfo[] GetTimeZones(TimeSpan offset) { 
     return TimeZoneInfo.GetSystemTimeZones().Where(z => z.BaseUtcOffset == offset).ToArray(); 
    } 

Мне пришлось посмотреть некоторые из них. FLE = Финляндия, Литва, Эстония. GTB является более жестким, я предполагаю, что в Греции, Турции, Болгарии.

+0

Интересно, какое максимальное количество разных названных часовых поясов для одного смещения ..... –

+0

Не забывайте о часовых поясах, которые GMT + 2, когда они находятся в режиме летнего времени. –

+1

@ Давид, это UTC + 02: 00 с 9. Известные нечетные шары - Непал, UTC + 05: 45, UTC + 11: 00, где никто не живет, а Тонга, UTC + 13: 00 игнорирует строку даты. –

1

Это не будет возможным, потому что разные временные зоны могут одни и те же смещение от GMT (или UTC более правильным).

1

Если вы ожидаете «Восточного стандартного времени», вам нужно больше информации, чем просто смещение от GMT. Например, GMT-5 - это Восточное стандартное время, Центральное летнее время, Восточное стандартное время (Индиана) и различные южноамериканские часовые пояса, как с летним временем, так и без него, а также в другом графике DST, чем в США.

0

Если у вас все в порядке с первым доступным TimeZone, который соответствует этому смещению по GMT, это должно быть легко.

Это от моей головы, но ...

TimeZoneInfo getTimeZone(string gmtstring) 
{ 
    foreach(TimeZoneInfo ti in TimeZoneInfo.GetSystemTimeZones()) 
    { 
    TimeSpan tsp = ti.BaseUtcOffset; 
    if(tsp.ToString((tsp.TotalMinutes < 0 ? "-" : "+")+"hh:mm") == gmtstring.Substring(3)) 
     return ti; 
    } 
    return null; 
} 

В противном случае нет прямой связи между часовыми поясами и смещениями по Гринвичу (есть много часовых поясов на то же часовом поясе, как и другие говорили)

PS: gmtstring должен находиться в формате «GMT (+ | -) HH: SS»

Смежные вопросы