TimeSpan и длительности
Измеряйте промежутки времени.
«TimeSpan и длительности» — бесплатный урок C# Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.
Что такое TimeSpan
Если DateTime обозначает момент времени, то TimeSpan представляет промежуток времени, например 2 часа или 90 минут.
Это длительность, не связанная с календарём. Используйте её для результатов работы секундомера, ограничений времени и определения промежутка между двумя датами.
Создание TimeSpan
Один из конструкторов принимает часы, минуты и секунды: new TimeSpan(hours, minutes, seconds).
Поэтому new TimeSpan(1, 30, 0) обозначает один час и тридцать минут. Значение выводится в понятном формате h:mm:ss.
using System;
class Program
{
static void Main()
{
TimeSpan span = new TimeSpan(1, 30, 0);
Console.WriteLine(span);
}
}Фабричные методы
Часто код становится понятнее, если использовать фабричный метод. TimeSpan.FromMinutes(90) создаёт промежуток длительностью 90 минут.
Есть и соответствующие вспомогательные методы: FromHours, FromSeconds, FromDays и FromMilliseconds.
using System;
class Program
{
static void Main()
{
TimeSpan span = TimeSpan.FromMinutes(90);
Console.WriteLine(span);
}
}Итоговые и компонентные значения
У TimeSpan есть два семейства свойств. Hours, Minutes и Seconds возвращают отдельные компоненты длительности.
Свойства с префиксом Total..., такие как TotalMinutes, выражают всю длительность в одной единице измерения в виде десятичного числа.
using System;
class Program
{
static void Main()
{
TimeSpan span = TimeSpan.FromMinutes(90);
Console.WriteLine(span.Hours);
Console.WriteLine(span.TotalMinutes);
}
}Различие компонентов и итоговых значений
Для 90 минут Hours равно 1, а Minutes — 30, потому что длительность состоит из 1 часа и 30 минут.
А TotalHours равно 1.5, а TotalMinutes — 90, поскольку эти свойства считают весь промежуток в одной единице измерения.
using System;
class Program
{
static void Main()
{
TimeSpan span = TimeSpan.FromMinutes(90);
Console.WriteLine(span.TotalHours);
}
}Вычитание двух дат
Если вычесть один DateTime из другого, результатом будет TimeSpan.
Так обычно находят, сколько времени прошло между двумя моментами, например продолжительность события.
using System;
class Program
{
static void Main()
{
DateTime start = new DateTime(2024, 3, 5, 9, 0, 0);
DateTime end = new DateTime(2024, 3, 5, 11, 30, 0);
TimeSpan diff = end - start;
Console.WriteLine(diff.TotalHours);
}
}Сложение TimeSpan
Значения TimeSpan можно складывать и вычитать с помощью обычных операторов + и -.
Объединение двух длительностей даёт более длинную длительность, что удобно для суммирования нескольких промежутков.
using System;
class Program
{
static void Main()
{
TimeSpan a = TimeSpan.FromMinutes(45);
TimeSpan b = TimeSpan.FromMinutes(15);
Console.WriteLine((a + b).TotalMinutes);
}
}Отрицательные длительности
TimeSpan может быть отрицательным, если конечный момент предшествует начальному или результат получен вычитанием.
Метод Duration возвращает абсолютное значение, а Negate меняет знак. Это удобно, когда важна только величина промежутка.
using System;
class Program
{
static void Main()
{
TimeSpan span = TimeSpan.FromHours(-3);
Console.WriteLine(span.Duration().TotalHours);
}
}Сравнение длительностей
Значения TimeSpan сравниваются с помощью <, > и ==, как и числа.
Так можно проверить, больше ли одна длительность другой, например чтобы ограничить максимально допустимое время.
using System;
class Program
{
static void Main()
{
TimeSpan limit = TimeSpan.FromHours(2);
TimeSpan used = TimeSpan.FromMinutes(150);
Console.WriteLine(used > limit);
}
}Нулевое значение и константы
TimeSpan.Zero обозначает отсутствие прошедшего времени и удобно как начальное значение при суммировании.
Также существуют TimeSpan.MinValue и TimeSpan.MaxValue, задающие крайние границы длительности.
using System;
class Program
{
static void Main()
{
TimeSpan total = TimeSpan.Zero;
total += TimeSpan.FromMinutes(10);
Console.WriteLine(total.TotalMinutes);
}
}Форматирование TimeSpan
Форматировать TimeSpan можно с помощью пользовательской строки. Например, @"hh\:mm" выводит часы и минуты.
Обратные косые черты экранируют двоеточие, поэтому оно отображается буквально. Для быстрого вывода обычно достаточно стандартного ToString.
using System;
class Program
{
static void Main()
{
TimeSpan span = new TimeSpan(2, 5, 0);
Console.WriteLine(span.ToString(@"hh\:mm"));
}
}Быстрая проверка
У Вас есть TimeSpan длительностью 90 минут. Какое свойство возвращает значение 1.5?
Итоги
TimeSpan — это длительность. Создать его можно с помощью new TimeSpan(...) или фабричных методов, например FromMinutes.
Свойства компонентов, такие как Hours, отличаются от свойств Total.... Вычитание двух DateTimes даёт TimeSpan, а длительности можно складывать, сравнивать и форматировать.
Часто задаваемые вопросы
Урок «TimeSpan и длительности» бесплатный?
Да — полный текст урока «TimeSpan и длительности» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.
Чему я научусь в уроке «TimeSpan и длительности»?
Измеряйте промежутки времени. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C# Academy?
Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «TimeSpan и длительности»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C# Academy?
Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание DateTimes
- Форматирование дат
- TimeSpan и длительности
- Арифметика дат