有人可以解释一下它的工作原理吗?我需要将SQL Server中的DateTime与用户输入进行比较。
这是我正在寻找的一个例子:
DateTime[] dates = { DateTime.Now, DateTime.UtcNow };
Console.WriteLine(dates.Where(x => x < DateTime.Now)); // I need to know if they are the same without converting them to strings.
Console.Read();
我正在使用Entity Framework,在实体类Dates
中,属性是DateTime,我需要将其与用户的输入进行比较,我找到的唯一解决方案是CreateDate函数。
如您所知,我无法直接将POST值与Date属性进行比较。例如:
db.dates.Where(x => x.StartDate < "2012-02-13 00:00:00.000") // error, cannot compare DateTime with string
所以,我尝试将值转换为DateTime:
DateTime start_date = Convert.ToDateTime("2012-02-13 00:00:00.000");
db.dates.Where(x => x.StartDate < start_date ) // PROBLEM!!
为什么呢?那么,start_date
的输出是:
2012-02-13 12:00:00 am
但是在数据库中,结束日期和开始日期如下:
2012-02-13 00:00:00.000 // all have zeros at the end
如何比较输入日期为2012-02-13 00:00:00.000
格式的日期?
我不在乎使用什么,我只需要相同的格式和相同的数据类型。
答案 0 :(得分:4)
我只需要相同的格式
不,你没有。您需要最合适的数据类型,即DateTime
(或者DateTimeOffset
),您需要忘记字符串格式。
“2012-02-13 12:00:00 am”只是该值的不同文字表示,也可以表示为“2012-02-13 00:00:00.000”。两者都代表2012年2月13日的午夜。只要您的数据库字段是适当的DateTime
类型,它就不重要了。你真的不需要担心格式。
您可能需要担心这些值是UTC还是当地时间,但这是一个单独的问题。
(我个人使用DateTime.Parse
或DateTime.ParseExact
而不是Convert.ToDateTime
,但这是一个稍微不同的问题。)
答案 1 :(得分:0)
使用DateTime时,首先需要确定是否要使用比较时的日期和时间。如果您想要包含时间,那么您需要 Date.Now 来初始化变量。如果您不想包含时间,只需比较数据的日期部分,那么您需要使用 Date.Today 。
您需要检查代码的第一件事是确保您只使用Date.Today。
现在,当我看你的例子时,我没有看到任何问题。
所以,我尝试将值转换为DateTime
DateTime star_date = Convert.ToDateTime(“2012-02-13 00:00:00.000”);
然后放手,让我们再比较一下:
db.dates.Where(x =&gt; x.StartDate&lt; start_date)//问题!!
为什么呢?好吧,start_date的输出是:
2012-02-13 12:00:00 am
比较x.StartDate&lt; start_date,您没有任何数据是正常的,因为“2012-02-13 12:00:00”等于“2012-02-13 00:00:00.000”。由于您的日期相同,因此查询不返回任何数据是正常的。