Шаг 180.
Microsoft Visual C++ 2010. Язык С/С++.
Компоненты Windows Forms. Некоторые сведения о работе с датами

    На этом шаге мы рассмотрим класс DateTime и приведем пример работы с объектами этого класса.

    При разработке приложений часто приходится сталкиваться с необходимостью работы с датами, а не только с форматированным выводом дат. Приходится заниматься декомпозицией даты (разбиением ее на число, месяц, год) и последующей работой с каждой из ее частей, приходится добавлять к дате дни, месяцы и годы, сравнивать даты, складывать и вычитать их, переводить содержимое строки, в которой записана дата, в тип DateTime (последнее кстати, выполняет метод Parse(String)). Работа с датами основывается на использовании элементов класса DateTime. В таблице 1 показаны несколько методов этого класса:

Таблица 1. Методы класса DateTime
Наименование Описание
AddDays Добавка заданного количества дней к значению даты
AddHours Добавка заданного количества часов к значению даты
AddMilliseconds Добавка заданного количества миллисекунд к значению даты
AddMinutes Добавка заданного количества минут к значению даты
AddMonths Добавка заданного количества месяцев к значению даты
AddSeconds Добавка заданного количества секунд к значению даты
AddTicks Добавка заданного количества тиков к значению даты
AddYears Добавка заданного количества лет к значению даты
Compare Сравнение двух объектов типа DateTime и возврат целого, которое указывает, меньше ли первая дата второй или нет
DaysInMonth Возвращает количество дней в указанном месяце года
FromBinary Переводит 64-разрядную величину в тип DateTime

    В таблице 2 приведены некоторые свойства этого класса.

Таблица 2. Свойства класса DateTime
Наименование Описание
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());
 }
Архив проекта можно взять здесь.

    На следующем шаге мы закончим изучение этого вопроса.




Предыдущий шаг Содержание Следующий шаг