【问题标题】:Converting and comparing mysql and c# datetimemysql和c#datetime的转换和比较
【发布时间】:2015-10-18 23:41:21
【问题描述】:

您好,我正在开发一个程序,但在日记部分我遇到了一些问题。

在注册条目时,我使用以下代码,其中 appdate 是约会日期。 dtpappdate 是我的日期时间选择器。

cmd.Parameters.AddWithValue("?appdate", dtpappdate.Value.ToShortDateString());

上面的代码工作正常,当我输入时。它成功地将日期存储到mysql数据库中。

然后当我从数据库中读取时,我想比较数据库中条目的日期和我在计算机上的当前日期,以便它只显示匹配的日期来显示我的待办事项列表。

以下是要读取和比较的代码,但我的程序给了我一个错误。告诉我我无法转换数据。

DateTime dn = new DateTime();
        dn = DateTime.Now;

        string constring = "Server=localhost;Database=vetsoft; uid=root;pwd=geyikler88;";
        string command = "SELECT * FROM vetsoft.clients ";

        try
        {
            using (MySqlConnection myCon = new MySqlConnection(constring))
            {
               using (MySqlCommand cmd = new MySqlCommand(command, myCon))
              {
                  myCon.Open();

                  MySqlDataReader myReader = cmd.ExecuteReader();

                  while (myReader.Read())
                {
                    if( Convert.ToDateTime( myReader["appdate"].ToString()) == dn)
                    {
                        listBox1.Items.Add("İsim: " + myReader["name"].ToString() + " Telefon: " + myReader["phone"].ToString() + " P İsim: " + myReader["pname"].ToString() + " Yaş: " + myReader["age"].ToString() + " Randevu Saati: " + myReader["apptime"].ToString() + " Hastalık: " + myReader["sickness"].ToString() + " Ek Not: " + myReader["eknot"].ToString());

                    }
                }

如何正确进行比较?有什么帮助吗?

【问题讨论】:

  • 究竟是什么错误?在哪条线上?你的变量是什么?为什么要保留 DateTime 值及其字符串表示形式?这是一个不好的方法。插入值时使用 dtpappdate.Value,而不是字符串表示形式。
  • 你为什么要使用字符串?如果它是数据库中的日期,只需在任何地方使用DateTime。不要在dtappdate.Value 上致电ToShortDateString。将myReader["appdate"] 转换为DateTime,而不是将其转换为字符串并返回。
  • 附加信息:无法将 MySQL 日期/时间值转换为 System.DateTime 这是我得到的错误
  • if 语句出现错误

标签: c# mysql


【解决方案1】:

您比较 C# 的 DateTime.Now == MySQL 数据库中的日期时间。这不太可能是真的,除非纯粹靠运气,因为 DateTime.Now 包括当前时间到滴答声。

假设您只对按日期匹配感兴趣,请使用 DateTime.Today 进行比较,但您的 MySQL 数据库中的日期值也应该是日期,因此如果您存储时间,则需要去掉时间。

【讨论】:

    【解决方案2】:

    您不应该将日期转换为字符串进行比较。如果您只想比较日期时间的日期部分,请使用 Date 属性,例如:

    var appDate = myReader["appdate"] as Datetime;
    if (appDate.Date == Datetime.Now.Date) {
        // Your code goes here
    } 
    

    将日期保存在 UTC 中也是一个好习惯。这样您就不必担心时区和夏季节省时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2011-03-09
      • 2013-08-08
      • 2014-05-02
      相关资源
      最近更新 更多