Содержание
При работе с датой/временем в C# довольно часто приходится сталкиваться со структурой TimeSpan
. Структура TimeSpan
представляет собой временной интервал со знаком, то есть, с использованием этой структуры, мы можем получать как положительное, так и отрицательное число, например, дней, часов и так далее. Структура TimeSpan
используется, в частности, в случае, когда нам необходимо вычесть из одной структуры DateTime
другую.
Свойства TimeSpan
Наиболее часто свойства TimeSpan
используются при получении разницы (интервала времени) между двумя переменными типа DateTime
. Например,
static void Main(string[] args) { DateTime date1 = new DateTime(2022, 2, 1, 8, 0, 15); //01.02.2022 08:00:15 DateTime date2 = new DateTime(2022, 2, 18, 13, 30, 30);//018.02.2022 13:30:30 TimeSpan interval = date1.Subtract(date2); Console.WriteLine(interval.ToString()); }
В этом случае мы получим отрицательное значение:
То есть, разница между двумя датами составляет 17 дней 5 часов 30 минут и 15 секунд
. При этом, чаще всего, нам необходимо знать разницу двух DateTime
, выраженную не столько в виде структура TimeSpan
, сколько в каких-либо конкретных единицах времени — днях, часах, минутах, секундах и т.д. И для этого у TimeSpan
имеются следующие свойства:
Days |
Возвращает количество дней периода времени, представленного текущей структурой TimeSpan . |
Hours |
Возвращает количество часов периода времени, представленного текущей структурой TimeSpan . |
Minutes |
Возвращает количество минут периода времени, представленного текущей структурой TimeSpan . |
Seconds |
Возвращает количество секунд периода времени, представленного текущей структурой TimeSpan . |
Milliseconds |
Возвращает количество миллисекунд периода времени, представленного текущей структурой TimeSpan . |
Ticks |
Возвращает количество тактов, представляющее значение текущей структуры TimeSpan . |
TotalDays |
Возвращает значение текущей структуры TimeSpan , выраженное в количестве дней. |
TotalHours |
Получает значение текущей структуры TimeSpan , выраженное в количестве часов. |
TotalMinutes |
Возвращает значение текущей структуры TimeSpan , выраженное в количестве минут. |
TotalSeconds |
Возвращает значение текущей структуры TimeSpan , выраженное в количестве секунд. |
TotalMilliseconds |
Получает значение текущей структуры TimeSpan , выраженное в количестве миллисекунд. |
Чтобы увидеть, чем отличаются свойства, начинающиеся с Total...
от их аналогов, допишем наш пример следующим образом:
DateTime date1 = new DateTime(2022, 2, 1, 8, 0, 15); //01.02.2022 08:00:15 DateTime date2 = new DateTime(2022, 2, 18, 13, 30, 30);//018.02.2022 13:30:30 TimeSpan interval = date1.Subtract(date2); Console.WriteLine($"TimeSpan = {interval}"); Console.WriteLine($"Days = {interval.Days}"); Console.WriteLine($"TotalDays = {interval.TotalDays}");
В консоли мы увидим следующий вывод:
Days = -17
TotalDays = -17,229340277777776
На этом примере видно, что, когда мы получаем значение свойства Days
, то из значение TimeSpan
берется только один компонент (количество дней), преобразуется в целое число и это число является значением свойства. Если же мы получаем значение TotalDays
, то весь интервал TimeSpan
преобразуется в количество дней и, в этом случае, значение свойства уже не будет целочисленным. Например, в нашем случае, разница между двумя датами составляет -17,22934… дней. Аналогичным образом работают и другие свойства TimeSpan
.
Также, можно отметить то, что наиболее крупной единицей измерения у TimeSpan
является день. Сделано это, прежде всего в целях согласованности, так как количество дней в месяце и году может различаться, а TimeSpan возвращает интервал времени не привязанный к какой-либо определенной дате.
Методы TimeSpan
У TimeSpan
определены также различные методы, которые можно использовать, например, для сложения и вычитания двух TimeSpan
. Ниже представлены основные методы TimeSpan
.
Compare(Time |
Сравнивает два значения TimeSpan и возвращает целое значение, которое показывает, является ли первое значение короче, равно или длиннее второго значения. |
Математические операции с TimeSpan |
|
Add(Time |
Возвращает новый объект TimeSpan , значение которого равно сумме указанного объекта TimeSpan и данного экземпляра. |
Subtract(Time |
Возвращает новый объект TimeSpan , значение которого равно разности между указанным объектом TimeSpan и данным экземпляром. |
Multiply(Double) |
Возвращает новый объект TimeSpan , значение которого является результатом умножения данного экземпляра и указанного factor . |
Divide(Time |
Возвращает новое значение Double , которое является результатом деления данного экземпляра и указанного ts . |
Divide(Double) |
Возвращает новый объект TimeSpan , значение которого является результатом деления данного экземпляра и указанного divisor . |
Операции преобразования TimeSpan |
|
Negate() |
Возвращает новый объект TimeSpan , значение которого равно значению данного экземпляра с противоположным знаком. |
Duration() |
Возвращает новый объект TimeSpan , значением которого является абсолютное значение текущего объекта TimeSpan . |
Операции создания нового экземпляра TimeSpan |
|
From |
Возвращает объект TimeSpan , представляющий заданное количество дней, округленное до ближайшей миллисекунды. |
From |
Возвращает объект TimeSpan , представляющий указанное количество часов, округленное до ближайшей миллисекунды. |
From |
Возвращает объект TimeSpan , представляющий указанное количество миллисекунд. |
From |
Возвращает объект TimeSpan , представляющий указанное количество минут, округленное до ближайшей миллисекунды. |
From |
Возвращает объект TimeSpan , представляющий указанное количество секунд, округленное до ближайшей миллисекунды. |
From |
Возвращает объект TimeSpan , представляющий заданное время в тактах. |
Операции парсинга TimeSpan |
|
Parse(String) |
Преобразует строковое представление интервала времени в его эквивалент TimeSpan . |
Try |
Преобразовывает строковое представление интервала времени в его эквивалент TimeSpan и возвращает значение, позволяющее определить успешность преобразования. |
ParseExact(String, String, IFormatProvider) |
Преобразует строковое представление интервала времени в его эквивалент TimeSpan , используя указанные формат и сведения о форматировании, связанные с языком и региональными параметрами. Формат строкового представления должен полностью соответствовать заданному формату. |
Как можно видеть, кроме сложения и вычитания, для TimeSpan
мы можем также применять и такие операции, как деление и умножение. Например,
DateTime date1 = new DateTime(2022, 2, 1, 8, 0, 15); //01.02.2022 08:00:15 DateTime date2 = new DateTime(2022, 2, 18, 13, 30, 30);//018.02.2022 13:30:30 TimeSpan interval = date1.Subtract(date2); Console.WriteLine($"TimeSpan = {interval}"); TimeSpan multiInterval = interval.Multiply(2); Console.WriteLine($"Удвоенный TimeSpan = {multiInterval}");
Вывод консоли:
Удвоенный TimeSpan = -34.11:00:30
Что касается методов From...
, то с использованием этих методов можно создавать свои интервалы времени, например, так:
TimeSpan span = TimeSpan.FromSeconds(86400);//сутки Console.WriteLine($"TimeSpan = {span}");
Вывод консоли:
Итого
Структура TimeSpan
представляет собой интервал времени со знаком. Используя TimeSpan
мы можем создавать интервалы времени, получать значение дней, часов, минут и т.д. прошедших с какого-либо момента времени или получать разницу двух значений DateTime
.