DateTime.Now在网站上传到不同服务器时引起麻烦

时间:2015-03-09 19:49:25

标签: timezone cultureinfo culture

我的网站位于.net mvc。我已经使用jQuery日历将客户端的日期保存到数据库MS SQL中。我还使用DateTime.Now保存了日期。问题是该应用程序托管在美国的服务器上,但我的客户端在巴基斯坦。根据巴基斯坦时间,他们想要时间。

我尝试使用TimeZoneInfo类,但我无法将其用作类库或DLL。如何使用静态密封类并访问其方法?其次我在web.config中使用了文化ur-PKR;它允许我以格式dd / MM / yyyy添加日期,这是正常工作(根据PK风格)。现在使用文化样式ur-PK之后,我应该使用Timezoneinfo类吗?

1 个答案:

答案 0 :(得分:1)

首先,您应该将DateTime 格式与时区分开。他们是完全不同的问题。

对于大多数方案(但不是全部),您应该以UTC格式保存数据库中的值,并在需要将它们显示到客户端时将它们转换为适当的时区 - 这也是你应该将它们转换为字符串的点。 (您应该将值存储在DateTime字段或数据库中的类似字段中 - not 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 Time库,这样可以更轻松地跟踪哪个是本地的,这是即时的等等。