Конвертировать GMT Diff в часовой пояс .Net? - PullRequest
2 голосов
/ 08 февраля 2011

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

например. «Стандартное восточное время» или «Стандартное время Австралии»

спасибо

Ответы [ 4 ]

4 голосов
/ 08 февраля 2011

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

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

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

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

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

1 голос
/ 08 февраля 2011

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

1 голос
/ 08 февраля 2011

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

0 голосов
/ 08 февраля 2011

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

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

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"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...