Как вы рассчитываете накопительное время в C#?
Вопрос
Я хочу рассчитать промежуток времени между двумя значениями, которые я сохранил в базе данных.Итак, буквально я хочу знать промежуток времени между двумя значениями.
14:10:20 - 10:05:15 = 02:05:05
Таким образом, результат будет 02:05:05.
Как я смогу добиться этого с помощью С#?
14:10:20 — это формат, в котором я сохранил его в своей базе данных.
Решение
Считайте два значения времени в переменные TimeSpan, затем выполните .Subtract()
для большей переменной TimeSpan, чтобы получить результат TimeSpan.
Например. TimeSpan difference = t1.Subtract(t2);
.
Другие советы
Вашим первым шагом будет перенос значений времени, хранящихся в вашей базе данных, в .NET. DateTime
структуры.
Если вы сохранили их как значения SQL-DateTime в базе данных, вы можете получить их напрямую как DateTime
.Это будет выглядеть примерно так:
SQLCommand getTimeCommand = new SQLCommand("SELECT time FROM table", dbConnection);
SQLDataReader myReader = getTimeCommand.ExecuteReader();
while (myReader.Read())
{
DateTime time = myReader.GetDateTime(0);
}
myReader.Close();
Ваша реализация может отличаться, обратитесь к документации ADO.NET в библиотеке MSDN.
Если у вас уже есть строка, представляющая время, вы можете проанализировать ее в DateTime
используя статические методы
DateTime.Parse
или
DateTime.ParseExact
В вашем случае вам может потребоваться использовать ParseExact
, который может быть снабжен строкой формата, определяющей способ чтения строки.Примеры можно найти в библиотеке MSDN.
Длительность в .NET хранится внутри TimeSpan
структура.Получить прошедшее время между датами и временем легко:
DateTime time1, time2; //filled with your timevalues from the db
TimeSpan elapsed = d2 - d1;
elapsed
теперь содержит промежуток времени между двумя DateTimes
.В структуре имеется несколько членов для доступа к TimeSpan
.Загляните в библиотеку MSDN, чтобы найти те, которые вам нужны.
Объекты DateTime поддерживают оператор «-», поэтому вы можете просто считать время в таких объектах и вычесть его.Чтобы проверить, проверьте это:
DateTime then = DateTime.Now;
Thread.Sleep(500);
DateTime now = DateTime.Now;
TimeSpan time = now - then;
MessageBox.Show(time.ToString());