我似乎无法找到答案,因此这篇文章。我希望存储在SQL数据库中的时间在我的网站上显示为数据库中的确切时间。目前,情况并非如此。正在显示的时间正在转换为浏览计算机的本地时间。由于保存的时间是预约时间,无论浏览计算机在哪里或什么时区,转换它都没有意义。我认为使用TimeZone和TimeZoneInfo方法将时间转换为本地时间,但这似乎是自动发生的。如何将保存的确切时间保存为我网站上显示的时间?
SQL数据库字段ETAStart和ETAEnd被定义为日期时间。
数据库的更新在控制器中处理如下:
if (TryUpdateModel(model)) {
System.DateTime ETAEnd = Convert.ToDateTime(model.ETAStart).AddHours(3);
model.ETAEnd = ETAEnd;
model.UpdatedBy = CurrentUser();
model.UpdateDate = Convert.ToDateTime(DateTime.Now.ToString("U"));
dc.SubmitChanges();
return View(new GridModel<ManifestMasterModel> { Data = GetMMList(0) });
} else {
return View();
}
提前感谢您,我非常感谢所有回复的人。
答案 0 :(得分:0)
您是否检查了服务器上设置的时区?几天前它发生在我身上,事实证明托管服务器有不同的时区。
以下是检查方法:
Response.Write(TimeZoneInfo.Local.DisplayName)
编辑1:
您可以使用Utc时间将其转换为您想要的时区。参见:
TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"));
答案 1 :(得分:0)
您是否尝试将日期时间存储为UTC:
model.UpdateDate = Convert.ToDateTime(DateTime.Now.ToString("U"));
您可以像这样使用它来进行转换:
model.UpdateDate = DateTime.Now.ToUniversalTime();
答案 2 :(得分:0)
我不完全确定我明白这个问题是什么,但听起来我需要实现自定义模型绑定器。
这些资源可能会对您有所帮助:
Custom DateTime model binder in Asp.net MVC
http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx
虽然,我认为使用字符串的快速修复建议没有任何问题(我认为你会帮自己一个忙)。听起来你正试图让客户端和MVC忽略处理日期的时区含义,这可能会花费更多的工作并且比使用字符串方法更不干净。您仍然可以在数据库中使用DateTime,只需提取用户提交的字符串值,然后使用适当的时区将其解析为日期时间。