DateTime.Now 当网站上传到不同的服务器时造成问题

Posted

技术标签:

【中文标题】DateTime.Now 当网站上传到不同的服务器时造成问题【英文标题】:DateTime.Now causing trouble when website uploaded on different server 【发布时间】:2015-03-09 19:49:25 【问题描述】:

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

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

【问题讨论】:

主题:The Case Against DateTime.Now 另外——当你说你“不能使用 TimeZoneInfo”——你是在 .NET 3.5 或更高版本上吗? 【参考方案1】:

首先,您应该将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 Time 库,这样可以更轻松地跟踪哪些是本地的,哪些是即时的等。

【讨论】:

我无法使用 TimeZoneInfo 类!!我试图添加为参考,但它没有添加!你有什么建议...其次我应该在 utc.now 中保存日期吗?? @WajahatQureshi:您不会向类添加reference。您只需添加对程序集的引用和命名空间的 using 指令。但由于它位于 mscorlib 程序集和 System 命名空间中,您可能不需要做任何事情。是的,正如我在帖子中所说,您可能想要以 UTC 存储时间戳

以上是关于DateTime.Now 当网站上传到不同的服务器时造成问题的主要内容,如果未能解决你的问题,请参考以下文章

DateTime.Now 和文化/时区特定

“DateTime.Now” - 为啥它返回 GMT?

Django DateTimeField 和 datetime.datetime.now() 给出不同的时间

asp.net中,如何调用系统时间作参数传到数据库中(DataTime类型)

处理DateTime.Now不经过ToString()转换的格式(带有AMPM)问题

将 DateTime.Now 转换为时间前 C# [重复]