C# Academy · Урок

Арифметика дат

Складывайте, вычитайте и сравнивайте даты.

Урок 4 из 413 шагов

«Арифметика дат» — бесплатный урок C# Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Арифметика с датами

Значения DateTime неизменяемы: арифметические операции никогда не изменяют исходное значение. Вместо этого каждая операция возвращает совершенно новый DateTime.

В этом уроке рассматриваются сложение и вычитание времени, сравнение дат и ответы на вопросы вроде «сколько дней осталось до события».

AddDays

Метод AddDays возвращает дату, отстоящую на указанное количество дней в будущем. Чтобы перейти назад, передайте отрицательное число.

Поскольку DateTime неизменяем, необходимо использовать возвращённое значение — исходное останется без изменений.

using System;

class Program
{
    static void Main()
    {
        DateTime d = new DateTime(2024, 3, 5);
        DateTime later = d.AddDays(10);
        Console.WriteLine(later.ToString("yyyy-MM-dd"));
    }
}

Семейство Add

Для каждой единицы времени есть свой метод Add: AddHours, AddMinutes, AddSeconds, AddMonths и AddYears.

Все они принимают положительные или отрицательные числа, поэтому один набор методов подходит и для будущих, и для прошлых дат.

using System;

class Program
{
    static void Main()
    {
        DateTime d = new DateTime(2024, 3, 5, 9, 0, 0);
        Console.WriteLine(d.AddHours(5).Hour);
    }
}

AddMonths обрабатывает переполнение

AddMonths учитывает разную продолжительность месяцев. При добавлении одного месяца к 31 января получается 28 или 29 февраля, а не недопустимая дата.

Благодаря этому Вам не нужно вручную проверять, сколько дней в каждом месяце.

using System;

class Program
{
    static void Main()
    {
        DateTime d = new DateTime(2024, 1, 31);
        Console.WriteLine(d.AddMonths(1).ToString("yyyy-MM-dd"));
    }
}

Переход в прошлое

Чтобы перейти в прошлое, передайте отрицательный аргумент. AddDays(-7) возвращает дату на неделю раньше.

Отдельного метода вычитания дней нет: отрицательные значения позволяют удобно решить эту задачу.

using System;

class Program
{
    static void Main()
    {
        DateTime d = new DateTime(2024, 3, 5);
        Console.WriteLine(d.AddDays(-7).ToString("yyyy-MM-dd"));
    }
}

Добавление TimeSpan

TimeSpan можно непосредственно добавить к DateTime оператором + или с помощью метода Add.

Это удобно, когда длительность уже рассчитана и Вы хотите сдвинуть на неё дату.

using System;

class Program
{
    static void Main()
    {
        DateTime d = new DateTime(2024, 3, 5, 9, 0, 0);
        DateTime later = d + TimeSpan.FromHours(3);
        Console.WriteLine(later.Hour);
    }
}

Разница между датами

Вычитание одной даты из другой создаёт TimeSpan, описывающий промежуток между ними.

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

using System;

class Program
{
    static void Main()
    {
        DateTime start = new DateTime(2024, 1, 1);
        DateTime end = new DateTime(2024, 3, 1);
        Console.WriteLine((end - start).TotalDays);
    }
}

Сколько дней до события

Часто требуется посчитать количество дней до даты в будущем. Вычтите сегодняшнюю дату из целевой и прочитайте TotalDays или Days.

Использование фиксированных дат делает результат предсказуемым во время обучения.

using System;

class Program
{
    static void Main()
    {
        DateTime today = new DateTime(2024, 3, 1);
        DateTime party = new DateTime(2024, 3, 15);
        Console.WriteLine((party - today).Days);
    }
}

Сравнение дат

Значения DateTime сравниваются с помощью <, > и ==. Более ранняя дата меньше более поздней.

Также есть методы, такие как CompareTo и Equals, если нужен формальный результат сравнения.

using System;

class Program
{
    static void Main()
    {
        DateTime a = new DateTime(2024, 1, 1);
        DateTime b = new DateTime(2024, 6, 1);
        Console.WriteLine(a < b);
    }
}

Високосные годы и количество дней в месяце

На вопросы о календаре отвечают два статических вспомогательных метода. DateTime.IsLeapYear(year) возвращает true для високосных лет.

DateTime.DaysInMonth(year, month) сообщает, сколько дней в указанном месяце, правильно обрабатывая февраль.

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine(DateTime.IsLeapYear(2024));
        Console.WriteLine(DateTime.DaysInMonth(2024, 2));
    }
}

Начало и конец дня

Чтобы получить начало дня, используйте свойство Date, которое обнуляет время до полуночи.

Чтобы получить последний момент дня, прибавьте один день и вычтите один тик либо прибавьте 23:59:59. Свойство Date — самый простой строительный блок.

using System;

class Program
{
    static void Main()
    {
        DateTime d = new DateTime(2024, 3, 5, 14, 30, 0);
        Console.WriteLine(d.Date.ToString("yyyy-MM-dd HH:mm"));
    }
}

Быстрая проверка

Вы начинаете с 31 января 2024 года и вызываете AddMonths(1). Какую дату Вы получите?

Итоги

Арифметические операции с DateTime возвращают новые значения. Сдвигайте даты с помощью AddDays, AddMonths и других методов, используя отрицательные значения для перехода назад.

Вычитайте даты, чтобы получить TimeSpan, сравнивайте их операторами и используйте IsLeapYear, DaysInMonth и Date для календарных задач.

Можно начать бесплатно

Изучай C# с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
93
Уроки
346

Часто задаваемые вопросы

Урок «Арифметика дат» бесплатный?

Да — полный текст урока «Арифметика дат» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Арифметика дат»?

Складывайте, вычитайте и сравнивайте даты. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Арифметика дат»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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