Арифметика дат
Складывайте, вычитайте и сравнивайте даты.
«Арифметика дат» — бесплатный урок 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 — локальная установка не требуется.