实体框架中的日期时间转换

本文关键字:时间 转换 日期 框架 实体 | 更新日期: 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" />