Класс даты QDate


Приложениям часто требуется информация о дате и времени. Например, для выдачи отчетной информации или для реализации часов. Qt предоставляет для работы с датой и временем три класса: QDate, QTime и QDateTime, определенные в заголовочных файлах QDate, QTime и QDateTime.

Класс QDate представляет собой структуру данных для хранения дат и проведения с ними разного рода операций. В конструкторе класса QDate передаются три целочисленных параметра. В первом передается год, во втором — месяц, а в третьем — день. Например, создадим объект, который будет содержать дату 25 октября 2004:


QDate date(2007, 10, 25);

Эти значения можно установить и после создания объекта с помощью метода setDate(). Например:


QDate date;
date.setDate(2007, 10, 25);

Для получения значений года, месяца и дня, установленных в объекте даты, следует воспользоваться следующими методами:

  • year() — возвращает целый год в диапазоне от 1752 до 8000;
  • month() — возвращает целое значение месяца в диапазоне от 1 до 12 (с января по декабрь);
  • day() — возвращает день месяца в диапазоне от 1 до 31.

С помощью метода daysInMonth() можно узнать количество дней в месяце, а с помощью метода daysInYear () — количество дней в году.

Для получения дня недели следует вызвать метод dayOfWeek(). Для получения дня года служит метод dayOfYear(). Можно также узнать номер недели, для чего нужно вызвать метод weekNumber() .

Метод toString() позволяет получить текстовое представление даты.

Можно определить собственный формат времени, передав в метод toString() строку-шаблон, описывающую его. Например:


QDate date(2007, 10, 25); 
QString str; 
str = date.toString("d.M.yy"); //str - "3.7.07" 
str = date.toString("dd/MM/yy"); //str - "03/07/04" 
str = date.toString("yyyy.MMM.ddd") ; //str = "2007.июл.Сб" 
str = date.toString("yyyy.MMMM.dddd");//str = "2007.Июль.суббота"

При помощи метода addDays() можно получить измененную дату, добавив или отняв от нее дни. Действия методов addMonths() и addYears() аналогичны, но разница в том, что они оперируют месяцами и годами. Например:


QDate date(2007, 1, 3); 
QDate date2 = date.addDays(-7); 
QString str = date2.toString("dd/MM/yy"); //str = "27/12/06" 

Класс QDate предоставляет метод fromString(), позволяющий проводить обратное преобразование из строкового типа к типу QDate. Для этого, в первом параметре метода нужно передать формат. Одна из самых частых операций — получение текущей даты. Для этого нужно вызвать метод currentDate().

При помощи метода daysTo() можно узнать разницу в днях между двумя датами. Следующий пример определяет количество дней от текущей даты до Нового года:


QDate dateToday = QDate::currentDate();
QDate dateNewYear(dateToday.year(), 12, 31);
qDebug() << "Осталось " << dateToday.daysTo(dateNewYear) << " дней до Нового года";

Объекты дат можно сравнивать друг с другом, для чего в классе QDate определены операторы ==, !=, <, <=, > и >=. Например:


QDate datel(2007, 1, 3);
QDate date2(2007, 1, 5);
bool b = (datel == date2); //b = false

Читать далее: Класс времени QTime