Я пытаюсь проверить, прошел ли 1 час из строки Datetime, которая у меня есть в базе данных SQL Server. Я попробовал этот код, но он не сработал или я не понял его правильно.
Я пытаюсь взять значение столбца Datetime и проверить, прошел ли 1 час от TimeDate.Now.
Вот мой код:
using (var GetLastPost = new SqlCommand("SELECT PostDate FROM Accs2 WHERE Username LIKE @user1", con))
{
GetLastPost.Parameters.AddWithValue("@user1", ecid);
using (var LastReader = await GetLastPost.ExecuteReaderAsync())
{
if (!LastReader.HasRows || !LastReader.Read())
{
}
else
{
DateTime k = Convert.ToDateTime(LastReader["PostDate"].ToString());
if (k > DateTime.Now)
{
MessageBox.Show("Your Money is in the Box");
}
else
{
MessageBox.Show("1 Hour Not Passed yet");
con.Close();
}
}
}
}
Как вы думаете, что делает k > DateTime.Now?
k - значение coulmn из типа DateTime, которое у меня есть в моей таблице, что я пытаюсь сделать, это проверить, прошло ли это значение coulmn (PostDate) как пройденное / coparte через 1 час от Datetime. Теперь мне извините за мой плохой английский
Какое окно сообщения отображается с вашим текущим кодом?
@ChetanRanpariya, я получаю «Ваши деньги в коробке», но когда я проверяю строку базы данных и копирую с моими часами, это неверно ... и должен возвращать «1 час еще не прошел», что я хочу получить, если час прошло, затем поставил и вернул подождите еще 1 час, как какой-то цикл, который можно выполнить 1 раз в час
Вы отлаживали код? Какую ценность вы получаете от k? Вы также можете поделиться примером значения PostDate? (k > DateTime.Now) никогда не будет правдой, если у вас есть старая дата в базе данных. Итак, либо у вас неправильные данные в db, либо k имеет неправильное значение. if (k.AddHours(1) > DateTime.Now) - правильный чек
Какой тип PostDate в базе данных?
@mjwills тип - DateTime Type, а текст, который у меня есть сейчас, - это на этот раз жало 07/03/2018 21:49:59 (время UTCnow)
@mjwills, я думаю, я не очень хорошо объяснил себя, что я хочу сделать, это когда пользователь пытается получить ящик, он может взять этот ящик 1 раз в час, поэтому, когда он взял ящик, я хочу вставить в базу данных пользователя PostDate новое дату и время, которое пользователь нужно подождать еще 1 час, и снова и снова вот так





Простой метод будет примерно таким:
public bool HasAnHourPassed(DateTime compareTime)
{
var timePassed = DateTime.Now - compareTime;
return timePassed.TotalHours > 1;
}
Еще проще и, вероятно, лучше просто сделать это в самой команде SQL: SELECT PostDate from Accs2 where Username like @user1 AND DATEDIFF(hour,SYSDATETIME(),PostDate) > 1
извините, но я не понял, как вставить эту строку в свой код, моя цель - если время, прошедшее msgbox ("деньги в коробке"), если время не прошло msgbox ("только": timePassed минут осталось до следующего окна)
@dodexahedron К сожалению, предполагает, окно SQL и окно приложения имеют синхронизированные часы, находятся в одном часовом поясе и т. д. Hth ..
@Avnego, вы просто вызываете этот метод там, где вы пытаетесь выполнить оператор if.
@EdSF Если это не так, и если есть вероятность, что пользователи / веб-серверы / клиентские приложения / что бы то ни было сами не находятся в одном часовом поясе, то в любом случае следует использовать DateTimeOffset, иначе всегда будет проблема.
k?