Como você calcula o tempo acumulativo em C#?
Pergunta
Quero calcular o intervalo de tempo entre 2 vezes que salvei em um banco de dados.Então, literalmente, quero saber o período de tempo entre os 2 valores.
14:10:20 - 10:05:15 = 02:05:05
Então o resultado seria 02:05:05.
Como eu conseguiria isso usando C#?
14:10:20 é o formato que salvei em meu banco de dados.
Solução
Leia os dois valores de tempo nas variáveis TimeSpan e, em seguida, execute um .Subtract()
na variável TimeSpan maior para obter o resultado TimeSpan.
Por exemplo. TimeSpan difference = t1.Subtract(t2);
.
Outras dicas
Seu primeiro passo será obter os valores de tempo armazenados em seu banco de dados no .NET DateTime
estruturas.
Se você os armazenou como valores SQL-DateTime no banco de dados, poderá obtê-los diretamente como DateTime
.Seria algo assim:
SQLCommand getTimeCommand = new SQLCommand("SELECT time FROM table", dbConnection);
SQLDataReader myReader = getTimeCommand.ExecuteReader();
while (myReader.Read())
{
DateTime time = myReader.GetDateTime(0);
}
myReader.Close();
Sua implementação pode ser diferente; consulte a documentação do ADO.NET na biblioteca MSDN.
Se você já possui uma string representando o tempo, você pode analisar a string em um DateTime
usando os métodos estáticos
DateTime.Parse
ou
DateTime.ParseExact
No seu caso, você pode precisar usar ParseExact
, que pode ser fornecido com uma string de formato definindo como ler a string.Exemplos devem ser encontrados na biblioteca MSDN.
As durações no .NET são armazenadas dentro de um TimeSpan
estrutura.Obter o tempo decorrido entre as datas é fácil:
DateTime time1, time2; //filled with your timevalues from the db
TimeSpan elapsed = d2 - d1;
elapsed
agora contém o intervalo de tempo entre os dois DateTimes
.Existem vários membros para a estrutura acessar o TimeSpan
.Consulte a biblioteca MSDN para encontrar os que você precisa.
Os objetos DateTime suportam o operador "-" para que você possa apenas ler seus horários nesses objetos e subtraí-los. Para testar, confira isso:
DateTime then = DateTime.Now;
Thread.Sleep(500);
DateTime now = DateTime.Now;
TimeSpan time = now - then;
MessageBox.Show(time.ToString());