Вычислить время из базы данных - PullRequest
1 голос
/ 15 октября 2019

Я пытаюсь заставить мою программу рассчитывать время перерыва с данными, хранящимися в базе данных mysql.

private void timerpause_Tick(object sender, EventArgs e)
        {
            MySqlConnection conn = DBUtils.GetDBConnection();
            conn.Open();

            MySqlCommand dbrequest = conn.CreateCommand();
            dbrequest.CommandText = "SELECT pstart FROM arbeitszeiten WHERE fullname = '" + textBoxfullname.Text + "' and active = 'JA'";
            string pausebeginn = dbrequest.ExecuteScalar().ToString();

            MySqlCommand dbrequest2 = conn.CreateCommand();
            dbrequest2.CommandText = "SELECT ptotal FROM arbeitszeiten WHERE fullname = '" + textBoxfullname.Text + "' and active = 'JA'";
            string pausenzeit = dbrequest2.ExecuteScalar().ToString();

            TimeSpan pause = Convert.ToDateTime(pausenzeit).TimeOfDay;
            DateTime start = Convert.ToDateTime(pausebeginn);
            TimeSpan zwischen = (DateTime.Now - Convert.ToDateTime(start)).Add(pause);


            label1.Text = zwischen.ToString();

            conn.Close();
        }

Когда код выполняется, он говорит мне:

TimeSpan pause = Convert.ToDateTime(pausenzeit).TimeOfDay;

Уставы не определяются как действительные значения DateTime (Die Zeichenfolge wurde nicht als gültiges DateTime erkannt)

Формат:

 DB pstart = yyyy-MM-dd HH:mm:ss
 DB ptotal = HH:mm:ss

Кто-нибудь видит мою ошибку (кроме отсутствиязапросы еще не заданы)?

1 Ответ

0 голосов
/ 22 октября 2019

Я согласен со всеми остальными, что в лучшем случае ваши даты должны храниться как даты. Я собираюсь сделать некоторые предположения. Тот, который ваша база данных находится вне вашего контроля или слишком много времени / не является приоритетом для решения по любой причине. Поэтому я предполагаю, что это заставит вас задуматься о том, как правильно разбирать даты и время в этих форматах. Я также собираюсь предположить, что вы имеете дело с пустыми значениями и исключениями формата для хитрых данных по отдельности.

Лично я предпочитаю использовать метод точного разбора для обеих дат и времени. Вы можете использовать его следующим образом, используя приведенные выше форматы (замените строковые даты своей переменной по своему усмотрению)

        CultureInfo provider = CultureInfo.InvariantCulture;
        DateTime thedate = DateTime.ParseExact("2019-10-21 22:05:23", "yyyy-MM-dd HH:mm:ss",provider);
        TimeSpan timeSpan = TimeSpan.ParseExact("14:04:41", @"h\:mm\:ss", provider);
...