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 当网站上传到不同的服务器时造成问题的主要内容,如果未能解决你的问题,请参考以下文章
Django DateTimeField 和 datetime.datetime.now() 给出不同的时间
asp.net中,如何调用系统时间作参数传到数据库中(DataTime类型)