На этом шаге мы рассмотрим класс DateTime и приведем пример работы с объектами этого класса.
При разработке приложений часто приходится сталкиваться с необходимостью работы с датами, а не только с форматированным выводом дат. Приходится заниматься декомпозицией даты (разбиением ее на число, месяц, год) и последующей работой с каждой из ее частей, приходится добавлять к дате дни, месяцы и годы, сравнивать даты, складывать и вычитать их, переводить содержимое строки, в которой записана дата, в тип DateTime (последнее кстати, выполняет метод Parse(String)). Работа с датами основывается на использовании элементов класса DateTime. В таблице 1 показаны несколько методов этого класса:
| Наименование | Описание |
|---|---|
| AddDays | Добавка заданного количества дней к значению даты |
| AddHours | Добавка заданного количества часов к значению даты |
| AddMilliseconds | Добавка заданного количества миллисекунд к значению даты |
| AddMinutes | Добавка заданного количества минут к значению даты |
| AddMonths | Добавка заданного количества месяцев к значению даты |
| AddSeconds | Добавка заданного количества секунд к значению даты |
| AddTicks | Добавка заданного количества тиков к значению даты |
| AddYears | Добавка заданного количества лет к значению даты |
| Compare | Сравнение двух объектов типа DateTime и возврат целого, которое указывает, меньше ли первая дата второй или нет |
| DaysInMonth | Возвращает количество дней в указанном месяце года |
| FromBinary | Переводит 64-разрядную величину в тип DateTime |
В таблице 2 приведены некоторые свойства этого класса.
| Наименование | Описание |
|---|---|
| Date | Возвращает компоненту даты |
| Day | Возвращает день месяца |
| DayOfWeek | Возвращает день недели (в числовом варианте значения от 0 (воскресенье) до 6 (суббота)) |
| DayOfYear | Возвращает день года |
| Hour | Возвращает час (значение от 0 до 23) |
| Millisecond | Возвращает количество миллисекунд |
| Minute | Возвращает количество минут |
| Month | Возвращает номер месяца (значение от 1 до 12) |
| Now | Возвращает объект DateTime, которому присвоены текущие дата и время данного компьютера, выраженные как местное время |
| Second | Возвращает количество секунд |
| Ticks | Возвращает количество тиков |
| TimeOfDay | Возвращает время дня (интервал времени, представляющий часть дня, прошедшую с полуночи) |
| Today | Возвращает текущую дату |
| Year | Возвращает год |
Остановимся более подробно на вычитании дат. На рисунке 1 показан вид формы с компонентами, а на рисунке 2 - результаты вычитания разных дат. В примере ниже приведены тексты обработчиков событий этого приложения.

Рис.1. Вычитание дат (форма в режиме конструктора)

Рис.2. Вычитание дат (выполнение приложения)
Тексты обработчиков:
// Кнопка "Выход" private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { Close(); } // Кнопка "Начать вычисления" private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { String^ s; System::DateTime date1 = System::DateTime( 2020, 6, 3, 22, 15, 0 ); System::DateTime date2 = System::DateTime( 2020, 12, 6, 13, 2, 0 ); // Это один из конструкторов класса DateTime, инициализирующий // экземпляр класса значениями (год, месяц, число, часы, минуты, секунды) System::DateTime date3 = System::DateTime( 2020, 10, 12, 8, 42, 0 ); // diff1 (разность) равна 185 дней, 14 часов, 47 минут. // Класс TimeSpan задает интервал времени. У него есть свои события и методы System::TimeSpan diff1 = date2.Subtract( date1 ); listBox1->Items->Add(date2.ToString()); listBox2->Items->Add(date1.ToString()); listBox3->Items->Add(diff1.ToString()); // date4 получается 17:55:00 System::DateTime date4 = date3.Subtract( diff1 ); listBox1->Items->Add(date3.ToString()); listBox2->Items->Add(diff1.ToString()); listBox3->Items->Add(date4.ToString()); // diff2 (разность) равна 55 дней, 4 часа, 20 минут. System::TimeSpan diff2 = date2 - date3; listBox1->Items->Add(date2.ToString()); listBox2->Items->Add(date3.ToString()); listBox3->Items->Add(diff2.ToString()); // date5 получается 17:55:00 System::DateTime date5 = date1 - diff2; listBox1->Items->Add(date1.ToString()); listBox2->Items->Add(diff2.ToString()); listBox3->Items->Add(date5.ToString()); }
На следующем шаге мы закончим изучение этого вопроса.