Сравнение SQL datetime с C # DateTime.Now - PullRequest
1 голос
/ 14 октября 2019

Я пытался найти правильное решение для следующей проблемы. У меня есть таблица SQL со столбцом времени (в этом формате: hh:mm:ss). Он содержит начальное время для программы.

Теперь я хочу сравнить время от указанного столбца до DateTime.Now, и всякий раз, когда время в столбце совпадает со временем, в которое теперь должен вызываться метод (например,).

У меня сейчас несколько проблем:

  1. Обычно я использую string startingtime = cmdx.ExecuteScalar().ToString(); для получения значения из таблицы SQL, но я не уверен, что это умно дляпреобразовать время в строку здесь

  2. Моя программа является службой Windows и всегда будет работать, и я не уверен, разумно ли использовать секунды при сравнении времени из таблицы SQL свремя, потому что даже разница в 1 секунду может означать, что метод не будет вызван.

Моя первая попытка была такой:

string startingtime = cmdx.ExecuteScalar().ToString();         
string timenow = DateTime.Now.ToString("HH:mm:ss");

var u1 = TimeSpan.Parse(timenow);
var u2 = TimeSpan.Parse(startingtime);
Console.WriteLine(u1 - u2);

Я мог бы тогдаиспользуйте разницу между u1 и u2 и, скажем, если она меньше одной минуты, программа должна запуститься. это нормальное решение, но может быть и лучше, я жду ваших решений. Заранее спасибо

1 Ответ

0 голосов
/ 14 октября 2019

Вместо преобразования текущей даты в строку и последующего использования TimeSpan.Parse() следует использовать свойство TimeOfDay, поскольку оно уже возвращает TimeSpan:

string startingtime = cmdx.ExecuteScalar().ToString();         

var u1 = DateTime.Now.TimeOfDay;
var u2 = TimeSpan.Parse(startingtime);
Console.WriteLine(u1 - u2);

Тогда, сравнение разницы во времени с определенным порогом должно быть способом. Вы можете использовать что-то вроде этого:

TimeSpan diff = u1 - u2;
if (diff.TotalSeconds > 60)
{
    // Call your method here.
}

Более того, в зависимости от типа вашего столбца в базе данных, вам может не потребоваться вызывать .ToString() и анализировать результат. Если это тип даты, может сработать что-то подобное:

var u2 = ((DateTime)cmdx.ExecuteScalar()).TimeOfDay;

В противном случае, если это строковый столбец, тогда TimeSpan.Parse(startingtime) будет в порядке.

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