C# 带字符串格式的日期时间建议

C# 带字符串格式的日期时间建议,c#,sql,entity-framework,datetime,C#,Sql,Entity Framework,Datetime,我正在进行一个比较SQL Server中两个DateTime值的查询。SQL server中的DateTime格式如下: 2010-09-20 00:00:00.000 我正在使用实体框架,让我告诉你我现在面临的问题 在实体框架中比较DateTime值时,属性必须与数据库相同,这意味着必须是DateTime。日期来自帖子,这意味着它是一个字符串。这里的问题是,如何将它们转换为DateTime,并与数据库中的格式相同 用户的输入是一个字符串,我要做的是: DateTime start_date

我正在进行一个比较SQL Server中两个
DateTime
值的查询。SQL server中的
DateTime
格式如下:

 2010-09-20 00:00:00.000
我正在使用实体框架,让我告诉你我现在面临的问题

在实体框架中比较
DateTime
值时,属性必须与数据库相同,这意味着必须是
DateTime
。日期来自帖子,这意味着它是一个字符串。这里的问题是,如何将它们转换为
DateTime
,并与数据库中的格式相同

用户的输入是一个字符串,我要做的是:

DateTime start_date = Convert.ToDateTime(postValueHere);
但该值与预期值不符:

2010/20/46 12:00:00 am
所以,我给它一个格式:

string format = "yyyy-MM-dd 00:00:00.000";
string date = start_date .ToString(format);
但现在该值变成字符串,这意味着我无法将该值与实体框架进行比较:

db.Product.Where(x=>x.START_DATE== date)//error, cannot compare datetime with string.
如何将用户的输入转换为与SQL Server中相同的格式,然后转换为
日期时间

您可以尝试使用以下格式:


您可以检查更多自定义格式。

如果您使用EF从数据库中获取该日期值,则该值应位于具有DateTime类型的属性中。此值只是一个DateTime结构,没有任何格式。
当您从post检查已解析的日期时,调试器会对该值使用
.ToString()
,以获取可以显示的字符串。它仍然是一个没有任何格式的DateTime结构


因此,只需比较DateTime值,而不用担心格式。

为什么要将值作为字符串进行比较,而不是作为DateTime进行比较?2010/20/46 12:00:00 am根本不是有效的DateTime。使用db.Product.Where(x=>x.START\u DATE==Convert.ToDateTime(postValueHere))时会出现什么错误?
Convert.ToDateTime(postValueHere)
应该将它放入一个C#
DateTime
对象中,然后当您执行
db.Product.Where(x=>x.START\u DATE==DATE)
时,实体框架应该为您处理转换。不确定问题出在哪里。@TimWagaman如果我按你说的做,输出将是2010-02-11 12:00:00.000,它将永远不会是相同的,因为数据库没有12:00:00.000,而是有2010-02-11 00:00:00.000。我错误地认为
ParseExact
将是解决方案。问题是从用户输入的内容将字符串输入到
DateTime
。然后有两个
DateTime
对象可以相互比较,它们没有“格式”的概念,即
DateTime
(仅当您将它们格式化为
字符串时)。唯一需要考虑的是当前区域设置和接受用户输入的有效格式。如果SQL中的值也是一个有效的
DateTime
数据类型,那么格式也不重要,只是区域设置(当然,除非存储UTC)。
 DateTime start_date;
 DateTime.TryParseExact(strDate, "yyyy-MM-dd hh:mm:ss tt",
                        System.Globalization.CultureInfo.InvariantCulture,
                        System.Globalization.DateTimeStyles.None, out start_date);
 Console.WriteLine(start_date);