3

Can someone explain how it works? I need compare a DateTime in SQL Server with an user input.

Here an example of what I'm looking for:

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();

I'm using Entity Framework and in the entity class Dates, the attributes are DateTime and I need to compare that with a user's input, and the only solution I found was the CreateDate function.

As you know, I cannot compare the POST value directly with a Date attribute. Example:

db.dates.Where(x => x.StartDate < "2012-02-13 00:00:00.000")    // error, cannot compare DateTime with string

So, I tried converting the value to DateTime:

DateTime start_date = Convert.ToDateTime("2012-02-13 00:00:00.000");
db.dates.Where(x => x.StartDate < start_date )    // PROBLEM!!

Why? Well, the output of start_date is:

2012-02-13 12:00:00 am

But in the database, the end and start date are as follows:

2012-02-13 00:00:00.000    // all have zeros at the end

How can I compare the date when the input date is in 2012-02-13 00:00:00.000 format?

I don't care what to use, I just need the same format and the same data type.

4

2 回答 2

5

我只需要相同的格式

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

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

可能需要担心这些值是 UTC 还是本地时间,但这是另一回事。

(我个人会使用DateTime.ParseorDateTime.ParseExact而不是Convert.ToDateTime,但这是一个稍微不同的问题。)

于 2013-04-08T15:11:09.497 回答
0

使用 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 上午

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

于 2013-04-08T21:16:39.467 回答