实体框架中的日期时间转换
本文关键字:时间 转换 日期 框架 实体 | 更新日期: 2023-09-27 18:32:00
我正在尝试向我的数据库插入日期时间值。我正在使用带有 ASP.NET MVC 4和SQL服务器的实体框架。
using (dc = new GateEntities())
{
tblSite site = new tblSite();
site.CalledInAt = DateTime.Parse("19/09/2013 00:29 AM", new CultureInfo("en- US", false));
dc.tblSites.Add(site);
dc.SaveChanges();
}
当我尝试保存数据时,出现错误:
"值'19/09/2013 00:29 AM'对 CalledInAt 无效。
我也试过Convert.ToDateTime()
但没有用。
这在我的本地机器中工作正常。它不仅在我的共享主机服务器上工作。
您列出的代码中有两个错误。
第一个(我猜这是输入问题时引入的错误)是您的文化信息被设置为'en- US'
应该'en-US'
另一个是美国日期的格式为"月"然后"日",并且在您的字符串中,这将使您设置的日期成为一年中的第 19 个月。
下面的代码适用于您的日期值...
DateTime.Parse("09/19/2013 00:29 AM", new System.Globalization.CultureInfo("en-US", false));
异常是由 EF 的验证引起的,该验证发生在与字符串 19/09/2013 00:29 AM
具有不同日期格式的区域性中。
在从用户输入为实体属性分配值时,最佳方法是确保独立于 UI 区域性。这意味着在 UI(可能是视图模型)中,您必须捕获用户输入并将其转换为DateTime
值。然后,您只需将DateTime
值分配给site.CalledInAt
。
另一种选择是在视图模型中包括 UI 区域性,并使用它来在控制器中执行转换。
我在web.config中设置了区域性,它开始工作了。
<globalization uiCulture="en" culture="en-GB" />