我的网站在.net mvc中。我已经使用jQuery日历将客户端的日期保存到数据库MS SQL中。此外,我还使用DateTime.Now保存了日期。问题是该应用程序托管在美国的服务器上,但我的客户端在巴基斯坦。他们想要根据巴基斯坦时间的时间。
我尝试使用TimeZoneInfo类,但我无法将其用作类库或DLL。如何使用静态密封类并访问其方法?其次,我在web.config中使用了文化你的PKR;它允许我以 dd/MM/yyyy 格式添加日期,该格式工作正常(根据 PK 样式)。现在使用文化风格您的PK之后,我应该使用时区信息类吗?
首先,您应该将DateTime
格式与时区分开。它们是完全独立的问题。
对于大多数方案(但不是全部),应以 UTC 格式将值保存在数据库中,并在需要向客户端显示值时将它们转换为适当的时区 - 这也是应将它们转换为字符串的点。(您应该将值存储在DateTime
字段中或数据库中的类似内容中 - 而不是varchar
)。
要从 UTC 值转换为巴基斯坦时区,只需获取带有 TimeZoneInfo.FindSystemTimeZoneById
TimeZoneInfo
,然后调用 TimeZoneInfo.ConvertTimeFromUtc
。如果您只需要在任何地方使用相同的时区,则可以只调用FindSystemTimeZoneById
一次并保留对它的引用。
// Ignore the "standard time" part - it really is both standard and daylight where
// necessary.
private static readonly TimeZoneInfo PakistanZone =
TimeZoneInfo.FindSystemTimeZoneById("Pakistan Standard Time");
...
DateTime utc = ...; // DateTime.UtcNow, or a stored value
DateTime local = TimeZoneInfo.ConvertTimeFromUtc(utc, PakistanZone);
您可能还需要考虑使用我的 Noda 时间库,这样可以更轻松地跟踪哪些是本地的,哪些是即时时间等。