C # объект datetime возвращает дату, но время всегда 00:00:00 - PullRequest
2 голосов
/ 01 марта 2012

Когда я смотрю в своей базе данных, поле Date таблицы Connections, тип которого DateTime, имеет значение 2012-03-01 01: 49: 02.097.

Но когда я хочу проверить,пользователь подключился за последний час:

if (user.Connections.Max(t => t.Date).Date.AddHours(1) > DateTime.Now)

Временная часть Даты всегда равна нулю.

Так что мой код работает только с полуночи до 1 часа утра, ха-ха!

Спасибо за помощь!

1 Ответ

6 голосов
/ 01 марта 2012

В этом есть два значения .Date, что создает некоторую путаницу;здесь:

t => t.Date

это означает «получить доступ к члену с именем Date, a DateTime»;так вот:

.Max(t => t.Date)

это означает "найти максимум по всем Date членам, a DateTime"

Однако!Это:

).Date.A
 ^^^^^

означает «взять часть этого значения только для даты» (любой DateTime имеет элемент .Date, который является частью значения только для даты);так что да: это идет к полуночи, затем вы добавляете час.Так;не делай этого!Вероятно, вам нужно:

if (user.Connections.Max(t => t.Date).AddHours(1) > DateTime.Now)

или, возможно, более эффективно:

var cutoff = DateTime.Now.AddHours(-1);
if (user.Connections.Any(t => t.Date > cutoff)) {
    ...
}

синус, который может закорачивать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...