none
Duvida com Timespan RRS feed

  • Pergunta

  • Pessoal, sou novo no fórum, e tenho um pequeno problema... Vou tentar ser o mais claro possíve.

    Tenho uma aplicação que registra os atendimentos de suporte técnico para os clientes.

    No banco de dados dessa aplicaçao, tenho os dois campos que quero trabalhr, que são At_datachamado, e at_datafinalizado

    Em um formulário da minha aplicação, eu tenho a necessidade de fazer uma média do tempo que cada atendimento demora, por exemplo, se um atendimento inicia 10:31 e termina 10:36, e outro inicia 10:37 e termina 10:42, a média é a soma da diferença dos horarios, divido pela quantidade de atendimentos, (10:36 - 10:31) + (10:42 - 10:37) / 2

    Estou postando o trecho do código que faz isso, porém não estou conseguindo obter sucesso, se alguem puder dar uma analizada no código e me dar alguma dica ou alguma outra maneira de se fazer isso, eu agradeço


    private void CarregaInfoAtendimento()
            {
                TimeSpan data1 = new TimeSpan();
                TimeSpan data2 = new TimeSpan();
                int i = 1;
                MySqlConnection conn = clsDefault.GetConnection();
                string sql = "SELECT * FROM tabatendimentos";
                var cmd = new MySqlCommand(sql,conn);
                MySqlDataReader dr;
                try
                {
                    conn.Open();
                    dr = cmd.ExecuteReader();
                    while (dr.Read())
                    {
    			// (7) é equivalente a dr("at_datafinalizado")
                        if (!dr.IsDBNull(7)) { 
                        data1 = dr.GetDateTime("At_datachamado") - dr.GetDateTime("At_datafinalizado");
                        data2 += data1;
                        i++;
                        }
                    }
                    double result =  (data2.TotalMinutes / i );
                    lblTempo.Text = result.ToString();
    
                }
                catch (Exception Ex)
                {
                    MessageBox.Show(Ex.Message);
                }
                finally
                {
                    conn.Close();
                }
    
            }



    domingo, 16 de agosto de 2015 13:34

Respostas

  • Tente utilizar TimeOfDay.

    Exemplo:

     class Atendimento
        {
            public DateTime Entrada { get; set; }
            public DateTime Saida { get; set; }
        }
    
    
    void Total(){
    
            var tempo = Convert.ToDateTime("2015-08-17 14:00:00");
    
            System.Collections.Generic.List<Atendimento> atendimentos = new System.Collections.Generic.List<Atendimento>();
            atendimentos.Add(new Atendimento() {Entrada = tempo, Saida = tempo.AddMinutes(5)});
            atendimentos.Add(new Atendimento() { Entrada = tempo.AddMinutes(50), Saida = tempo.AddMinutes(60) });
    
    
      int total = atendimentos
                .Select(atendimento => atendimento.Saida.TimeOfDay - atendimento.Entrada.TimeOfDay)
                .Select(difference => (int) difference.TotalMinutes)
                .Sum();
    
            Debug.WriteLine(total / atendimentos.Count);
    
    }


    ROBERTOSLJUNIOR

    • Marcado como Resposta Bruno Miquelotto segunda-feira, 17 de agosto de 2015 17:55
    segunda-feira, 17 de agosto de 2015 17:49

Todas as Respostas

  • Tente utilizar TimeOfDay.

    Exemplo:

     class Atendimento
        {
            public DateTime Entrada { get; set; }
            public DateTime Saida { get; set; }
        }
    
    
    void Total(){
    
            var tempo = Convert.ToDateTime("2015-08-17 14:00:00");
    
            System.Collections.Generic.List<Atendimento> atendimentos = new System.Collections.Generic.List<Atendimento>();
            atendimentos.Add(new Atendimento() {Entrada = tempo, Saida = tempo.AddMinutes(5)});
            atendimentos.Add(new Atendimento() { Entrada = tempo.AddMinutes(50), Saida = tempo.AddMinutes(60) });
    
    
      int total = atendimentos
                .Select(atendimento => atendimento.Saida.TimeOfDay - atendimento.Entrada.TimeOfDay)
                .Select(difference => (int) difference.TotalMinutes)
                .Sum();
    
            Debug.WriteLine(total / atendimentos.Count);
    
    }


    ROBERTOSLJUNIOR

    • Marcado como Resposta Bruno Miquelotto segunda-feira, 17 de agosto de 2015 17:55
    segunda-feira, 17 de agosto de 2015 17:49
  • Roberto, boa tarde! Gostei muito do seu exemplo, não tinha pensado em fazer com lista, eu já encontrei a solução, só não deu para postar no fórum ainda, mas postarei mais a tarde minha solução, e vou tentar implementar seu exemplo nela, pois ficou muito mais prático. Obrigado pela atenção
    segunda-feira, 17 de agosto de 2015 17:55