0Pricing
C# Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. Создание DateTimes
  2. Форматирование дат
  3. TimeSpan и длительности
  4. Арифметика дат
← Назад к C# Academy