如何从Datetime中提取时间

时间:2015-05-17 09:34:00

标签: c# mysql asp.net datetime

我试图从Datetime中提取时间,然后将其转换为int以向其添加10,然后将其转换为Datetime并存储在数据库中。但我不断收到以下错误:

  

“字符串未被识别为有效的DateTime。”

以下是代码:

MySqlConnection conn = new MySqlConnection(connection);
            String query = "Select timings from topogen.token_gen order by timings desc limit 0,1;";
            MySqlCommand cmd = new MySqlCommand(query, conn);

            String location = "";
            conn.Open();
            MySqlDataReader r = cmd.ExecuteReader();
            string timings="";

           while( r.Read()){
            timings = r["timings"].ToString();}

           DateTime time = DateTime.Parse(timings); //error appears here
           timings = time.ToString("HH:mm:ss");
           time = DateTime.Parse(timings);



           long  t = time.Ticks;
           t += 10;
           timings = t.ToString("HH:mm:ss");
           TextBox1.Text = timings;
           time = DateTime.ParseExact(timings, "HH:mm:ss", null);
            this.Location = location;
            conn.Close();

1 个答案:

答案 0 :(得分:1)

您的r["timings"].ToString()似乎生成了CurrentCulture没有standard date and time format的字符串表示形式。这就是你DateTime.Parse抛出FormatException

的原因
  1. 将您的timings列类型更改为datetime类型,即使也不会。
  2. 使用MySqlDataReader的{​​{3}}方法将其值设为DateTime
  3. MySqlDataReader r = cmd.ExecuteReader();
    if(r.Read())
    {
       DateTime timings = r.GetDateTime(0);
    }
    

    让我们看看你的其余代码。他们也有一些错误。

    long  t = time.Ticks;
    

    通过这个,您将获得DateTime的Ticks,例如, 2,193,385,800,000,000

    t += 10;
    

    有了这个,你现在可以获得2,193,385,800,000,010,因为它是long,这只是一个补充。

    timings = t.ToString("HH:mm:ss");
    

    这是一个错误。您尝试获取使用long CurrentCulture的{​​{1}}的字符串表示形式。它甚至不使用GetDateTime()。这是您的timingsHH:mm:ss作为字符串。并且您将尝试将其解析为DateTime.ParseExact(timings, "HH:mm:ss", null),其等于DateTime.ParseExact("HH:mm:ss", "HH:mm:ss", null)。如您所见,此解析操作将失败。

    考虑改变你的逻辑。