【发布时间】:2012-08-27 05:17:40
【问题描述】:
我这里的要求是相当标准的;我需要允许用户选择他们当前的时区并将其保存到他们的帐户中。然后,我将使用此值将存储的 DateTime 值转换为本地化时间。
我目前的想法是,我将允许用户从列表中选择一个 .NET TimeZoneInfo.Id(保存在数据库中以允许更友好的描述,但使用 TimeZoneInfo.GetSystemTimeZones() 构造) - 然后我将使用此值返回相关的TimeZoneInfo 实例使用TimeZoneInfo.FindSystemTimeZoneById() 并执行转换。我在这里看到的主要问题是 TimeZoneInfo.Id 是注册表中保存的值,而不是“标准”ID(例如,与 Olson 相比)。因此,服务器更新/迁移可能会使存储的 Id 完全失效并破坏转换..
简而言之 - 这种方法有效/安全吗?如果没有,是否有更好的方法来存储用户的时区偏好,同时处理夏令时等,而无需大量额外的逻辑?
【问题讨论】:
-
你看过
DateTimeOffset吗?还是NodaTime? -
@Oded DateTimeOffset 的问题在于它不支持夏令时
-
@Blam - 是的,我很清楚这一点。这就是为什么我也建议
NodaTime。 -
如果您想要本地时区,为什么不直接使用 TimeZoneInfo.Local.Id?如果您想从中选择一个列表,可以使用 TimeZoneInfo.GetSystemTimeZones()。