проблема со сравнением даты и времени в asp.net с#

#c#

#c#

Вопрос:

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

  protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SqlConnection con = new SqlConnection(strcon);
            if (con.State == ConnectionState.Closed)
            {
                con.Open();

            }
            SqlCommand cmd = new SqlCommand("select * from book_reserve_tbl;", con);
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows)
            {
                string todate_str;
                DateTime reserve_todate, current_datetime;
                current_datetime = DateTime.Now;
                string book_id;
                while (dr.Read())
                {

                    todate_str = dr.GetValue(4).ToString(); ;//this will assign the reserveToDate col value
                    String is_reserve = dr.GetValue(5).ToString();
                    reserve_todate = Convert.ToDateTime(todate_str);
                    if (reserve_todate < current_datetime amp;amp; is_reserve == "YES" )
                    {
                        Response.Write("<script>condition true</script>");
                        book_id = dr.GetValue(1).ToString();
                        UpdateCurrentStock(book_id);
                        UpdateBookReservation(book_id);
                    }

                    
                }
                con.Close();
                
            }
        }
       
        
        catch (Exception ex)
        {
            Response.Write("<script>alert('"   ex.Message   "');</script>");
        }
    }
  

пожалуйста, помогите, поскольку у меня нет опыта в этом

С уважением

Комментарии:

1. Тааак… В чем собственно проблема? кроме того, всегда лучше хранить datetime как фактическую конструкцию даты и времени в базе данных, а не как строку (если в вашей базе данных есть такие возможности)

2. Возможно, вы захотите указать, каким образом это не работает, предпочтительно с некоторыми примерами входных данных и наблюдаемого поведения по сравнению с ожидаемым поведением — это значительно упростило бы помощь

3. Единственное, что пока приходит на ум, — это часовой пояс.. убедитесь, что вы сравниваете время в пределах одного и того же часового пояса, и если нет, то вам нужно, чтобы ваша current_datetime переменная соответствовала часовому поясу поля базы данных, выполнив DateTime.UtcNow.AddHours(x) where x — смещение для необходимого часового пояса (еще лучше, сохраните поле даты DB как UTC и просто используйте DateTime.UtcNow ). Но, как говорили другие, вопрос требует более подробной информации, прежде чем мы сможем предложить что-либо, кроме предположения.

Ответ №1:

Если вы хотите рассчитать время между двумя значениями даты и времени, вам следует использовать TimeSpan:

 TimeSpan elapsed;
DateTime time1;
DateTime time2;

elapsed = time1.Subtract(time2);
//or with DateTime.Now
elapsed = DateTime.Now.Subtract(time1);
  

Никогда не используйте string для хранения значений DateTime!

Комментарии:

1. спасибо всем за резервную книгу repl.user только на 24 часа, и через 24 часа срок ее резервирования должен быть истек / отменен. теперь в sql srver у меня есть поле с типом данных DateTime, а не просто string . теперь, когда я сравниваю дату и время в моем данном коде, это не работает. может быть одна из причин, по которой формат переменной current_datetime равен 24/09/2020 12:52:40 вечера, а какое хранилище в базе данных — 2020-09-24 12:52:40.000 теперь, если формат не тот, может возникнуть проблема, но как я могу сохранить дату и время в базе данных sql server в следующем формате 24/09/2020 12:52:40. пожалуйста, помогите

2.Довольно уверен if (reserve_todate < current_datetime amp;amp; is_reserve == "YES" ) , что это правильно. оба < и == имеют более высокий приоритет оператора, чем amp;amp; поэтому круглые скобки не нужны

3. @brads3290: спасибо, вы правы! извините за неверную информацию! Я исправил свой ответ

4. @brads. да, я не использовал никаких парантез.

5. @ brads3290. я отобразил как текущую дату и время, так и сохраненную в базе данных. их формат практически одинаков . тогда почему условие не выполняется / true. я увеличил системную дату на 3 дня, а затем условие должно быть выполнено, но это не так