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

时间:2010-03-12 10:16:09

标签: c# datetime timezone

我正在使用.Net 3.5在C#中开发应用程序。我将用户的时区值存储在数据库中,格式为( - 05:00,1),其中 -5.00 表示EST时区值和 1 表示此时区遵循夏令时(如果0不是夏令时区)。

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

感谢任何帮助。感谢

4 个答案:

答案 0 :(得分:5)

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

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

一旦你有一个TimeZoneInfo并想要转换的瞬间,ConvertTimeFromUtcConvertTimeToUtc可能就是你想要的 - 但要小心你的意思“任何日期时间价值”;你需要确保你总是确切地知道你所代表的是什么。

BCL在所有这些方面都有些愚蠢,这是我开始Noda Time的原因之一,它允许使用IANA时区数据以及BCL。

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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