使用C#将时间转换为指定的时区?

我正在使用.Net 3.5在C#中开发应用程序。 我有用户的时区值以这种格式存储在DB中(-05:00,1) ,其中-5.00表示EST时区值, 1表示此时区跟随夏令时(如果0不是夏令时)区)。

现在我想考虑夏令时值将任何日期时间值转换为此时区值。

任何帮助表示赞赏。 谢谢

只有一个偏移量以及它是否在夏令时间内不足以指示时区:可能有几个时区具有相同的标准偏移和DST偏移,但在不同时间具有DST转换。

这些数据是否已存在于数据库中,或者您仍在设计它? 理想情况下,您应该存储时区ID – TimeZoneInfo使用的是Windows ID,这不是理想的IMO(我更喜欢行业其他人倾向于使用的IANA / Olson ID),但至少它确实代表了实时区。

一旦你有了TimeZoneInfo和你要转换的瞬间, ConvertTimeFromUtcConvertTimeToUtc可能就是你所追求的 – 但要注意你所说的“任何日期时间值”; 你需要确保你总是确切知道你所代表的是什么。

BCL在所有这些方面都有点毛茸茸,这是我启动Noda Time的原因之一,它允许使用IANA时区数据以及BCL。

@skeet对时区是正确的。 相信我,他们疯了。 你有像印度这样的地方.5小时rest。 像委内瑞拉这样的地方,只是改变他们的时区。 像美国这样的地方会改变DST开始和结束的日期。 你必须记住,时区受制于国家的政治意愿,而且它们确实会发生变化(比你想象的更频繁)。 使用时区ID而不是尝试跟踪数据库中的偏移量。

如果您还没有弄明白,如果您必须处理时区,使用DateTimeOffset将使您的生活更轻松100倍。

为什么不获得GMT0并添加用户的延迟(+/-)?

为此使用DateTime.ParseExact() 。 但这不支持DST指标。