На этом шаге мы рассмотрим класс 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()); }
На следующем шаге мы закончим изучение этого вопроса.