Структура TimeSpan в C#

При работе с датой/временем в 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.05:30:15

То есть, разница между двумя датами составляет 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}");

В консоли мы увидим следующий вывод:

TimeSpan = -17.05:30:15
Days = -17
TotalDays = -17,229340277777776

На этом примере видно, что, когда мы получаем значение свойства Days, то из значение TimeSpan берется только один компонент (количество дней), преобразуется в целое число и это число является значением свойства. Если же мы получаем значение TotalDays, то весь интервал TimeSpan преобразуется в количество дней и, в этом случае, значение свойства уже не будет целочисленным. Например, в нашем случае, разница между двумя датами составляет -17,22934… дней. Аналогичным образом работают и другие свойства TimeSpan.

Также, можно отметить то, что наиболее крупной единицей измерения у TimeSpan является день. Сделано это, прежде всего в целях согласованности, так как количество дней в месяце и году может различаться, а TimeSpan возвращает интервал времени не привязанный к какой-либо определенной дате.

Методы TimeSpan

У TimeSpan определены также различные методы, которые можно использовать, например, для сложения и вычитания двух TimeSpan. Ниже представлены основные методы TimeSpan.

Compare(TimeSpan, TimeSpan) Сравнивает два значения TimeSpan и возвращает целое значение, которое показывает, является ли первое значение короче, равно или длиннее второго значения.

Математические операции с TimeSpan

Add(TimeSpan) Возвращает новый объект TimeSpan, значение которого равно сумме указанного объекта TimeSpan и данного экземпляра.
Subtract(TimeSpan) Возвращает новый объект TimeSpan, значение которого равно разности между указанным объектом TimeSpan и данным экземпляром.
Multiply(Double) Возвращает новый объект TimeSpan, значение которого является результатом умножения данного экземпляра и указанного factor.
Divide(TimeSpan) Возвращает новое значение Double, которое является результатом деления данного экземпляра и указанного ts.
Divide(Double) Возвращает новый объект TimeSpan, значение которого является результатом деления данного экземпляра и указанного divisor.

Операции преобразования TimeSpan

Negate() Возвращает новый объект TimeSpan, значение которого равно значению данного экземпляра с противоположным знаком.
Duration() Возвращает новый объект TimeSpan, значением которого является абсолютное значение текущего объекта TimeSpan.

Операции создания нового экземпляра TimeSpan

FromDays(Double) Возвращает объект TimeSpan, представляющий заданное количество дней, округленное до ближайшей миллисекунды.
FromHours(Double) Возвращает объект TimeSpan, представляющий указанное количество часов, округленное до ближайшей миллисекунды.
FromMilliseconds(Double) Возвращает объект TimeSpan, представляющий указанное количество миллисекунд.
FromMinutes(Double) Возвращает объект TimeSpan, представляющий указанное количество минут, округленное до ближайшей миллисекунды.
FromSeconds(Double) Возвращает объект TimeSpan, представляющий указанное количество секунд, округленное до ближайшей миллисекунды.
FromTicks(Int64) Возвращает объект TimeSpan, представляющий заданное время в тактах.

Операции парсинга TimeSpan

Parse(String) Преобразует строковое представление интервала времени в его эквивалент TimeSpan.
TryParse(String, TimeSpan) Преобразовывает строковое представление интервала времени в его эквивалент 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 = -17.05:30:15
Удвоенный TimeSpan = -34.11:00:30

Что касается методов From..., то с использованием этих методов можно создавать свои интервалы времени, например, так:

TimeSpan span = TimeSpan.FromSeconds(86400);//сутки
Console.WriteLine($"TimeSpan = {span}");

Вывод консоли:

TimeSpan = 1.00:00:00

Итого

Структура TimeSpan представляет собой интервал времени со знаком. Используя TimeSpan мы можем создавать интервалы времени, получать значение дней, часов, минут и т.д. прошедших с какого-либо момента времени или получать разницу двух значений DateTime.

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии