Как прочитать временную метку из базы данных MySQL и проверить, равна ли сегодняшняя дата

#c# #mysql #datetime

#c# #mysql #datetime

Вопрос:

Прочитайте временную метку из базы данных MySQL и сравните с сегодняшней датой, DateDeposited , формат yyyy-MM-dd HH:mm tt .

 MySqlCommand cmd1 = conn.CreateCommand();
cmd1.CommandType = CommandType.Text;
cmd1.CommandText = ("select * from deposits where MemberID = @MemberID");
cmd1.Parameters.AddWithValue("@MemberID", lblmemberID.Text);

//DataReader
MySqlDataReader da;
conn.Open();

da = cmd1.ExecuteReader();

if (da.Read())
{
    // DateDeposited is timestamp
    if(da["DateDeposited"].ToString() == DateTime.Today.Date.ToString())
    {
         MessageBox.Show("Deposit already recorded");
         conn.Close();
    }
}
  

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

1. Попробуйте это: da["DateDeposited"].ToString().Equals(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");)

2. Я сравниваю da [«DateDeposited»]. toString() для сегодняшней даты (дд-ММ-гггг), пожалуйста, обратите внимание, что DateDeposited в базе данных — это временная метка в формате (гггг-ММ-дд)

3. Да, и именно поэтому я форматирую текущую дату в метку времени MySQL.

4. Не сравнивая ее с Datetime. Теперь я сравниваю с сегодняшней датой в формате (дд / ММ / гггг)

5. Смотрите этот пример преобразования временной метки MySQL в C # Datetime только с частью даты: dotnetfiddle.net/bJzbi7

Ответ №1:

Вы ищете способ узнать, находится ли временная метка между 00:00 и 23: 59: 59 по местному времени сегодня.

Этот запрос работает. И поскольку вы используете TIMESTAMP типы данных и выполняете сравнение дат внутри сервера MySQL, вам не нужно беспокоиться о разных настройках часового пояса на компьютере MySQL и компьютере, на котором выполняется ваш код C #.

 SELECT *, 
       CASE WHEN (DATE(DateDeposited)) = CURDATE() THEN 'yes'
            ELSE 'No' END IsItToday 
       FROM deposits where MemberID = @MemberID
  

Почему это работает? DATE(ts) извлекает дату временной метки.

Ответ №2:

Удалось решить проблему, добавив скрытый datetimepicker и прочитав его значение, и проверил, равно ли оно временной метке date из базы данных

 MySqlCommand cmd1 = conn.CreateCommand();
cmd1.CommandType = CommandType.Text;
cmd1.CommandText = ("select * from deposits where MemberID=@MemberID and DepositAmount=@DepositAmount and (DATE_FORMAT(DateDeposited,'%Y-%m-%d')= CURRENT_DATE())");
cmd1.Parameters.AddWithValue("@Name", txtname.Text);
cmd1.Parameters.AddWithValue("@Phone", txtphone.Text.ToString());
cmd1.Parameters.AddWithValue("@DepositAmount", txtamount.Text.ToString());
cmd1.Parameters.AddWithValue("@Rate", txtrate.Text.ToString());
cmd1.Parameters.AddWithValue("@MemberID", lblmemberID.Text);

//DataReader
MySqlDataReader da;
conn.Open();

da = cmd1.ExecuteReader();

if (da.Read())
{
string s;
DateTime converted = Convert.ToDateTime(da["DateDeposited"]);
s = converted.ToString("yyyy/MM/dd");
if ( da["MemberID"].ToString()==lblmemberID.Text amp;amp; da["DepositAmount"].ToString()== txtamount.Text.ToString()amp;amp; s.ToString()==dateTimePicker1.Value.Date.ToString("yyyy/MM/dd"))
{
 MessageBox.Show("Deposit already recorded", "Warning!!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
conn.Close();
}
}