【发布时间】:2011-02-07 22:04:29
【问题描述】:
我的数据库有每个国家/地区的 GMT 差异,例如 GMT+02:00 和 GMT-04:00 使用 C# .net 是否有一种简单的方法可以将其转换为实际的 .Net 时区?
例如“东部标准时间”或“东澳大利亚标准时间”
谢谢
【问题讨论】:
我的数据库有每个国家/地区的 GMT 差异,例如 GMT+02:00 和 GMT-04:00 使用 C# .net 是否有一种简单的方法可以将其转换为实际的 .Net 时区?
例如“东部标准时间”或“东澳大利亚标准时间”
谢谢
【问题讨论】:
您可以找到 一个 时区,只是不太可能是您想要的那个。 UTC 偏移量不明确。 GMT+02:00 是偏移量
你有什么特别喜欢的吗?你会用这样的表达式得到它们:
public static TimeZoneInfo[] GetTimeZones(TimeSpan offset) {
return TimeZoneInfo.GetSystemTimeZones().Where(z => z.BaseUtcOffset == offset).ToArray();
}
我不得不查看其中的一些。 FLE = 芬兰、立陶宛、爱沙尼亚。 GTB 更强硬,我猜是希腊、土耳其、保加利亚。
【讨论】:
这是不可能的,因为不同的时区可以共享与 GMT(或更正确的 UTC)的相同偏移量。
【讨论】:
如果您预计其中包含“东部标准时间”,则需要更多信息,而不仅仅是与 GMT 的偏移量。例如,GMT-5 是东部标准时间、中部夏令时间、东部标准时间(印第安纳州)以及各种南美时区,包括夏令时和不夏令时,并且与美国的 DST 时间表不同。
【讨论】:
如果您只接受与该 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;
}
否则时区和 GMT 偏移量之间没有直接关系(正如其他人所说,同一 GMT 偏移量上有许多时区)
PS:gmtstring 应该是“GMT(+|-)HH:SS”格式
【讨论】: