将GMT Diff转换为.Net时区?

时间:2011-02-07 22:04:30

标签: c# .net timezone

我的数据库为每个国家/地区提供GMT差异,例如 GMT + 02:00 GMT-04:00 使用C#.net有一种简单的方法可以将其转换为实际的.Net时区吗?

e.g。 “东部标准时间”或“E.澳大利亚标准时间”

感谢

4 个答案:

答案 0 :(得分:4)

你可以找到一个时区,而不是那个你想要的时区。 UTC偏移是不明确的。

是GMT + 02:00的偏移量
  • 乔丹标准时间
  • GTB标准时间
  • 中东标准时间
  • 埃及标准时间
  • 叙利亚标准时间
  • 南非标准时间
  • FLE标准时间
  • 以色列标准时间
  • 电子。欧洲标准时间

你特别喜欢什么?你会用这样的表达式得到它们:

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

我不得不看一些这些。 FLE =芬兰,立陶宛,爱沙尼亚。 GTB更加强硬,我猜想希腊,土耳其,保加利亚。

答案 1 :(得分:1)

这是不可能的,因为不同的时区可以与GMT共享相同的偏移量(或者更正确的UTC)。

答案 2 :(得分:1)

如果您期望“东部标准时间”,那么您需要的信息不仅仅是GMT的偏差。例如,GMT-5是东部标准时间,中部夏令时,东部标准时间(印第安纳州)和各种南美时区,无论是否有夏令时,以及与美国不同的DST时间表。

答案 3 :(得分:0)

如果您对第一个匹配GMT偏移量的TimeZone感到满意,那应该很容易。

这是我的想法,但是......

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;
}

否则时区与GMT偏移之间没有直接关系(相同的GMT偏移有许多时区,正如其他人所说的那样)

PS:gmtstring应该是“GMT(+ | - )HH:SS”格式