繁体   English   中英

具有实体框架的DateTime格式

[英]DateTime format with Entity Framework

有人能解释它是如何工作的吗? 我需要将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格式的日期?

我不在乎使用什么,我只需要相同的格式和相同的数据类型。

我只需要相同的格式

不,你没有。 您需要最合适的数据类型,即DateTime (或者可能是DateTimeOffset ),您需要忘记字符串格式。

“2012-02-13 12:00:00 am”只是该值的不同文本表示,也可以表示为“2012-02-13 00:00:00.000”。 两者都代表2012年2月13日的午夜。只要您的数据库字段是适当的DateTime类型,它就不重要了。 真的不需要担心格式。

可能需要担心这些值是UTC还是本地时间,但这是一个单独的问题。

(我个人使用DateTime.ParseDateTime.ParseExact而不是Convert.ToDateTime ,但这有点不同。)

使用DateTime时,首先需要确定是否要在比较时使用日期和时间。 如果你想包括时间,那么你需要Date.Now来初始化你的变量。 如果您不想包含时间,只需比较数据的日期部分,那么您需要使用Date.Today

  • Date.Now将始终包含调用函数的当前时间。
  • Date.Today将始终将时间设置为00:00:00,因此在比较日期时不会产生干扰。

您需要检查代码的第一件事是确保您只使用Date.Today。

现在,当我看你的例子时,我没有看到任何问题。

所以,我尝试将值转换为DateTime

DateTime star_date = Convert.ToDateTime(“2012-02-13 00:00:00.000”);

然后让我们再来比较一下:

db.dates.Where(x => x.StartDate <start_date)//问题!!

为什么? 好吧,start_date的输出是:

2012-02-13 12:00:00 am

当您比较x.StartDate <start_date时,您没有任何数据是正常的,因为“2012-02-13 12:00:00”等于“2012-02-13 00:00:00.000”。 由于您的日期相同,因此查询不返回任何数据是正常的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM