Класс QDateTime
Класс QDateTime предоставляет функции работы с датой и временем. Подробнее...
| Заголовок: | #include <QDateTime> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
Примечание: Все функции в этом классе являются повторно входящими.
Общедоступные типы
| перечисление | YearRange { Первый, Последний } |
Общедоступные функции
| QDateTime(QDateTime &&other) | |
| QDateTime(const QDateTime &other) | |
| QDateTime(QDate date, QTime time, const QTimeZone &timeZone) | |
| QDateTime(QDate date, QTime time, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0) | |
| QDateTime() | |
| QDateTime & | operator=(const QDateTime &other) |
| ~QDateTime() | |
| QDateTime | addDays(qint64 ndays) const |
| QDateTime | addMSecs(qint64 msecs) const |
| QDateTime | addMonths(int nmonths) const |
| QDateTime | addSecs(qint64 s) const |
| QDateTime | addYears(int nyears) const |
| QDate | date() const |
| qint64 | daysTo(const QDateTime &other) const |
| bool | isDaylightTime() const |
| bool | isNull() const |
| bool | isValid() const |
| qint64 | msecsTo(const QDateTime &other) const |
| int | offsetFromUtc() const |
| qint64 | secsTo(const QDateTime &other) const |
| void | setDate(QDate date) |
| void | setMSecsSinceEpoch(qint64 msecs) |
| void | setOffsetFromUtc(int offsetSeconds) |
| void | setSecsSinceEpoch(qint64 secs) |
| void | setTime(QTime time) |
| void | setTimeSpec(Qt::TimeSpec spec) |
| void | setTimeZone(const QTimeZone &toZone) |
| void | swap(QDateTime &other) |
| QTime | time() const |
| Qt::TimeSpec | timeSpec() const |
| QTimeZone | timeZone() const |
| QString | timeZoneAbbreviation() const |
| CFDateRef | toCFDate() const |
| QDateTime | toLocalTime() const |
| qint64 | toMSecsSinceEpoch() const |
| NSDate * | toNSDate() const |
| QDateTime | toOffsetFromUtc(int offsetSeconds) const |
| qint64 | toSecsSinceEpoch() const |
| QString | toString(const QString &format, QCalendar cal = QCalendar()) const |
| QString | toString(Qt::DateFormat format = Qt::TextDate) const |
| QString | toString(QStringView format, QCalendar cal = QCalendar()) const |
| QDateTime | toTimeSpec(Qt::TimeSpec spec) const |
| QDateTime | toTimeZone(const QTimeZone &timeZone) const |
| QDateTime | toUTC() const |
Статические общедоступные члены
| QDateTime | текущееВремя() |
| QDateTime | текущееВремяUtc() |
| qint64 | текущиеМиллисекундыСЭпохи() |
| qint64 | текущиеСекундыСЭпохи() |
| QDateTime | изCFDate(CFDateRef date) |
| QDateTime | изМиллисекундСЭпохи(qint64 msecs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0) |
| QDateTime | изМиллисекундСЭпохи(qint64 msecs, const QTimeZone &timeZone) |
| QDateTime | изNSDate(const NSDate *date) |
| QDateTime | изСекундСЭпохи(qint64 secs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0) |
| QDateTime | изСекундСЭпохи(qint64 secs, const QTimeZone &timeZone) |
| QDateTime | изСтроки(const QString &string, Qt::DateFormat format = Qt::TextDate) |
| QDateTime | изСтроки(QStringView string, Qt::DateFormat format = Qt::TextDate) |
| QDateTime | изСтроки(QStringView string, QStringView format, QCalendar cal = QCalendar()) |
| QDateTime | изСтроки(const QString &string, QStringView format, QCalendar cal = QCalendar()) |
| QDateTime | изСтроки(const QString &string, const QString &format, QCalendar cal = QCalendar()) |
Связанные нечлены
| bool | operator!=(const QDateTime &lhs, const QDateTime &rhs) |
| bool | operator<(const QDateTime &lhs, const QDateTime &rhs) |
| QDataStream & | operator<<(QDataStream &out, const QDateTime &dateTime) |
| bool | operator<=(const QDateTime &lhs, const QDateTime &rhs) |
| bool | operator==(const QDateTime &lhs, const QDateTime &rhs) |
| bool | operator>(const QDateTime &lhs, const QDateTime &rhs) |
| bool | operator>=(const QDateTime &lhs, const QDateTime &rhs) |
| QDataStream & | operator>>(QDataStream &in, QDateTime &dateTime) |
Подробное описание
Объект QDateTime кодирует календарную дату и время (дата и время). Он объединяет возможности классов QDate и QTime. Он может считывать текущую дату и время с системных часов. Он предоставляет функции для сравнения дат и времени и для изменения даты и времени путем добавления определенного количества секунд, дней, месяцев или лет.
QDateTime может описывать даты и время относительно местного времени, UTC, смещения от UTC или часового пояса в сочетании с классом QTimeZone. Например, часовой пояс «Europe/Berlin» будет применять правила перехода на летнее время, используемые в Германии с 1970 года. В отличие от этого, смещение от UTC +3600 секунд — это на один час раньше UTC (обычно записывается в стандартной записи ISO как «UTC+01:00»), без смещения или изменений в переходе на летнее время. При использовании местного времени или указанного часового пояса учитываются переходы часовых поясов, такие как начало и конец летнего времени (DST; см. ниже). Выбор системы, используемой для представления даты и времени, описывается как её «timespec».
Объект QDateTime обычно создается либо путем явного указания даты и времени в конструкторе, либо с помощью статической функции, такой как currentDateTime() или fromMSecsSinceEpoch(). Дату и время можно изменить с помощью setDate() и setTime(). Дата и время также могут быть установлены с помощью функции setMSecsSinceEpoch(), которая принимает время в миллисекундах с 00:00:00 1 января 1970 года. Функция fromString() возвращает QDateTime, заданное строкой и форматом даты, используемым для интерпретации даты в строке.
QDateTime::currentDateTime() возвращает QDateTime, которая выражает текущее время относительно местного времени. QDateTime::currentDateTimeUtc() возвращает QDateTime, которая выражает текущее время относительно UTC.
Функции date() и time() обеспечивают доступ к частям даты и времени даты и времени. Та же информация предоставляется в текстовом формате функцией toString().
QDateTime предоставляет полный набор операторов для сравнения двух объектов QDateTime, где меньшее значение означает более раннее время, а большее — более позднее.
Вы можете увеличить (или уменьшить) дату и время на заданное количество миллисекунд с помощью addMSecs(), секунд с помощью addSecs() или дней с помощью addDays(). Аналогично, вы можете использовать addMonths() и addYears(). Функция daysTo() возвращает количество дней между двумя датами и временем, secsTo() возвращает количество секунд между двумя датами и временем, а msecsTo() возвращает количество миллисекунд между двумя датами и временем. Эти операции учитывают летнее время (DST) и другие переходы часовых поясов, где это применимо.
Используйте toTimeSpec(), чтобы выразить дату и время в местном времени или UTC, toOffsetFromUtc(), чтобы выразить в терминах смещения от UTC, или toTimeZone(), чтобы выразить её относительно общего часового пояса. Вы можете использовать timeSpec(), чтобы узнать, относительно чего объект QDateTime хранит своё время. Когда это Qt::TimeZone, вы можете использовать timeZone(), чтобы узнать, какой часовой пояс используется.
Примечание: QDateTime не учитывает високосные секунды.
Замечания
Примечание: Все преобразования в строковые форматы выполняются с использованием локалей C. Для локализованных преобразований см. QLocale.
Примечание: В григорианском календаре нет года 0. Даты в этом году считаются недействительными. Год -1 — это год «до Рождества Христова» или «до нашей эры». День перед 1 января 1 года нашей эры — 31 декабря 1 года до нашей эры.
Диапазон допустимых дат
Диапазон значений, которые может представлять QDateTime, зависит от реализации внутренней структуры хранения. QDateTime в настоящее время хранится в qint64 в виде последовательности значений msecs, кодирующей дату и время. Это ограничивает диапазон дат примерно +/- 292 миллионами лет по сравнению с диапазоном QDate +/- 2 миллиарда лет. Следует соблюдать осторожность при создании QDateTime с экстремальными значениями, чтобы не переполнить хранилище. Точный диапазон поддерживаемых значений варьируется в зависимости от Qt::TimeSpec и часового пояса.
Использование часовых поясов
QDateTime использует системную информацию о часовых поясах для определения текущего местного часового пояса и его смещения от UTC. Если система настроена неправильно или не обновлена, QDateTime даст неправильные результаты.
Аналогично, QDateTime использует системную информацию для определения смещений других часовых поясов от UTC. Если эта информация неполная или устаревшая, QDateTime даст неправильные результаты. См. документацию QTimeZone для получения дополнительной информации.
В современных Unix-системах это означает, что QDateTime обычно имеет точную информацию об исторических переходах (включая DST, см. ниже), когда это возможно. В Windows, где система не поддерживает исторические данные о часовых поясах, точность исторических данных не поддерживается относительно переходов часовых поясов, в частности, включая DST.
Летнее время (DST)
QDateTime учитывает переходы между стандартным временем и летним временем. Например, если переход происходит в 2 часа ночи, а время переходит на 3 часа ночи, то с 02:00:00 до 02:59:59.999 отсутствует час, который QDateTime считает недействительным. Любые арифметические операции с датами учитывают этот недостающий час и возвращают допустимый результат. Например, добавление одной минуты к 01:59:59 даст 03:00:00.
Диапазон допустимых дат, учитывая летнее время, составляет с 1970-01-01 по настоящее время, и существуют правила для правильной обработки летнего времени до 2037-12-31, но они могут измениться. Для дат после 2037 года QDateTime делает лучшую оценку, используя правила для 2037 года, но мы не можем гарантировать точность; действительно, для любой будущей даты часовой пояс может изменить свои правила до наступления этой даты. Для дат до 1970 года QDateTime не учитывает изменения летнего времени, даже если база данных часового пояса системы предоставляет эту информацию, хотя он учитывает изменения стандартного смещения часового пояса, если эта информация доступна.
Смещения от UTC
Явного ограничения на смещение от UTC нет, но неявное ограничение накладывается при использовании методов toString() и fromString(), которые используют формат [+|-]чч:мм, фактически ограничивая диапазон +/- 99 часов и 59 минут и только целыми минутами. Обратите внимание, что в настоящее время ни один часовой пояс не выходит за пределы диапазона +/- 14 часов.
См. также QDate, QTime, QDateTimeEdit и QTimeZone.
Документация по типам элементов
[since 5.14] Перечисление QDateTime::YearRange
Это перечисление описывает диапазон годов (в григорианском календаре), представимых QDateTime:
| Константа | Значение | Описание |
|---|---|---|
QDateTime::YearRange::First |
-292275056 |
Поздние части этого года представимы |
QDateTime::YearRange::Last |
+292278994 |
Ранние части этого года представимы |
Все даты, строго находящиеся между этими двумя годами, также представимы. Однако обратите внимание, что григорианский календарь не имеет года ноль.
Примечание: QDate может описывать даты в более широком диапазоне годов. Для большинства целей это мало влияет, так как диапазон лет, который поддерживает QDateTime, достигает 292 миллионов лет по обе стороны от 1970 года.
Это перечисление было введено или изменено в Qt 5.14.
Документация по функциям элементов
QString QDateTime::toString(QStringView format, QCalendar cal = QCalendar()) const
QString QDateTime::toString(const QString &format, QCalendar cal = QCalendar()) const
Возвращает дату и время в виде строки. Параметр format определяет формат результирующей строки. Если задан cal, он определяет календарь, используемый для представления даты; по умолчанию используется григорианский. См. QTime::toString() и QDate::toString() для поддерживаемых спецификаторов времени и даты соответственно.
Любая последовательность символов, заключенная в одинарные кавычки, будет включена в выходную строку дословно (без кавычек), даже если она содержит символы форматирования. Две последовательные одинарные кавычки ("''") заменяются одной кавычкой в выводе. Все остальные символы в строке формата включаются в выходную строку дословно.
Форматы без разделителей (например, "ддмм") поддерживаются, но следует использовать их с осторожностью, так как результирующие строки не всегда надежно читаемы (например, если "дм" производит "212", это может означать либо 2 декабря, либо 21 февраля).
Примеры строк формата (предполагается, что QDateTime — 21 мая 2001 г. 14:13:09.120):
| Формат | Результат |
|---|---|
| дд.мм.гггг | 21.05.2001 |
| ddd MMMM d yy | Вт Май 21 01 |
| чч:мм:сс.zzz | 14:13:09.120 |
| чч:мм:сс.z | 14:13:09.12 |
| ч:м:с пп | 2:13:9 пп |
Если дата и время недействительны, будет возвращена пустая строка.
Примечание: Дни и месяцы, а также указание AM/PM даются на английском языке (локаль C). Если используются локализованные имена месяцев и дней и локализованные формы AM/PM, используйте QLocale::system().toDateTime().
См. также fromString(), QDate::toString(), QTime::toString() и QLocale::toString().
[since 5.8] QDateTime::QDateTime(QDateTime &&other)
Перемещает содержимое временного объекта other в этот объект и оставляет other в неопределённом (но корректном) состоянии.
Эта функция была введена в Qt 5.8.
QDateTime::QDateTime(const QDateTime &other)
Создаёт копию даты и времени other.
[since 5.2] QDateTime::QDateTime(QDate date, QTime time, const QTimeZone &timeZone)
Создаёт дату и время с заданной date и time, используя часовой пояс, указанный в timeZone.
Если date допустима, а time нет, время будет установлено в 00:00:00.
Если timeZone недопустима, то дата и время будут недопустимыми.
Эта функция была введена в Qt 5.2.
QDateTime::QDateTime(QDate date, QTime time, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0)
Создаёт дату и время с заданной date и time, используя указанные в spec и offsetSeconds секунды.
Если date допустима, а time нет, время будет установлено в полночь.
Если spec не равен Qt::OffsetFromUTC, offsetSeconds будет проигнорировано.
Если spec равен Qt::OffsetFromUTC и offsetSeconds равен 0, то timeSpec() будет установлено в Qt::UTC, т.е. смещение 0 секунд.
Если spec равен Qt::TimeZone, то spec будет установлен в Qt::LocalTime, т.е. текущий часовой пояс системы. Для создания даты и времени с Qt::TimeZone используйте соответствующий конструктор.
QDateTime::QDateTime()
Создаёт нулевую дату и время.
Нулевая дата и время недопустимы, так как их дата и время недопустимы.
См. также isValid().
QDateTime &QDateTime::operator=(const QDateTime &other)
Создаёт копию даты и времени other и возвращает ссылку на копию.
QDateTime::~QDateTime()
Удаляет дату и время.
QDateTime QDateTime::addDays(qint64 ndays) const
Возвращает объект QDateTime, содержащий дату и время на ndays дней позже или раньше, если ndays отрицательно.
Если timeSpec() равно Qt::LocalTime, а полученная дата и время попадают в час перехода от стандартного времени к летнему времени, результат будет скорректирован соответствующим образом, например, если переход происходит в 2 часа ночи, а время переходит на 3 часа ночи, а результат попадает между 2 и 3 часами ночи, то результат будет скорректирован, чтобы он попадал после 3 часов ночи.
См. также daysTo(), addMonths(), addYears() и addSecs().
QDateTime QDateTime::addMSecs(qint64 msecs) const
Возвращает объект QDateTime, содержащий дату и время на msecs миллисекунд позже или раньше, если msecs отрицательно.
Если дата и время недопустимы, будет возвращена недопустимая дата и время.
См. также addSecs(), msecsTo(), addDays(), addMonths() и addYears().
QDateTime QDateTime::addMonths(int nmonths) const
Возвращает объект QDateTime, содержащий дату и время на nmonths месяцев позже или раньше, если nmonths отрицательно.
Если timeSpec() равно Qt::LocalTime, а полученная дата и время попадают в час перехода от стандартного времени к летнему времени, результат будет скорректирован соответствующим образом, например, если переход происходит в 2 часа ночи, а время переходит на 3 часа ночи, а результат попадает между 2 и 3 часами ночи, то результат будет скорректирован, чтобы он попадал после 3 часов ночи.
См. также daysTo(), addDays(), addYears() и addSecs().
QDateTime QDateTime::addSecs(qint64 s) const
Возвращает объект QDateTime, содержащий дату и время, на s секунд позже (или раньше, если s отрицательно) по сравнению с датой и временем этого объекта.
Если эта дата и время некорректны, будет возвращена некорректная дата и время.
См. также addMSecs(), secsTo(), addDays(), addMonths() и addYears().
QDateTime QDateTime::addYears(int nyears) const
Возвращает объект QDateTime, содержащий дату и время, на nyears лет позже (или раньше, если nyears отрицательно) по сравнению с датой и временем этого объекта.
Если timeSpec() имеет значение Qt::LocalTime, и полученная дата и время попадают в промежуток перехода с летнего на зимнее время (или наоборот), то результат будет скорректирован соответственно. Например, если переход происходит в 2 часа ночи, а время переходит на 3 часа, и результат попадает между 2 и 3 часами ночи, то результат будет скорректирован, чтобы он приходился на время после 3 часов ночи.
См. также daysTo(), addDays(), addMonths() и addSecs().
[static] QDateTime QDateTime::currentDateTime()
Возвращает текущую дату и время, как сообщает системные часы, в часовом поясе по умолчанию.
См. также currentDateTimeUtc(), QDate::currentDate(), QTime::currentTime() и toTimeSpec().
[static] QDateTime QDateTime::currentDateTimeUtc()
Возвращает текущую дату и время, как сообщают системные часы, в формате UTC.
См. также currentDateTime(), QDate::currentDate(), QTime::currentTime() и toTimeSpec().
[static] qint64 QDateTime::currentMSecsSinceEpoch()
Возвращает количество миллисекунд, прошедших с 1970-01-01T00:00:00 по Всемирному координированному времени. Это число аналогично переменной POSIX time_t, но выражается в миллисекундах.
См. также currentDateTime(), currentDateTimeUtc() и toTimeSpec().
[static, since 5.8] qint64 QDateTime::currentSecsSinceEpoch()
Возвращает количество секунд, прошедших с 1970-01-01T00:00:00 по Всемирному координированному времени.
Эта функция была добавлена в Qt 5.8.
См. также currentMSecsSinceEpoch().
QDate QDateTime::date() const
Возвращает часть даты текущей даты и времени.
См. также setDate(), time() и timeSpec().
qint64 QDateTime::daysTo(const QDateTime &other) const
Возвращает количество дней от текущей даты и времени до заданной даты и времени other. Количество дней вычисляется как число раз, когда полуночь достигается между текущей датой и временем и датой и временем other. Это означает, что разница в 10 минут с 23:55 до 0:05 следующего дня учитывается как один день.
Если дата и время other раньше текущей даты и времени, возвращаемое значение отрицательное.
Пример:
QDateTime startDate(QDate(2012, 7, 6), QTime(8, 30, 0)); QDateTime endDate(QDate(2012, 7, 7), QTime(16, 30, 0)); qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate); startDate = QDateTime(QDate(2012, 7, 6), QTime(23, 55, 0)); endDate = QDateTime(QDate(2012, 7, 7), QTime(0, 5, 0)); qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate); qSwap(startDate, endDate); // Make endDate before startDate. qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);
См. также addDays(), secsTo() и msecsTo().
[static, since 5.5] QDateTime QDateTime::fromCFDate(CFDateRef date)
Создаёт новый объект QDateTime, содержащий копию CFDate date.
Эта функция была добавлена в Qt 5.5.
См. также toCFDate().
[static] QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0)
Возвращает дату и время, которые являются количеством миллисекунд msecs, прошедших с 1970-01-01T00:00:00.000 по Всемирному координированному времени (Qt::UTC) и преобразуются в заданный spec.
Обратите внимание, что возможны значения msecs, которые лежат вне допустимого диапазона QDateTime, как отрицательные, так и положительные. Поведение этой функции не определено для этих значений.
Если spec не равно Qt::OffsetFromUTC, то offsetSeconds будет проигнорировано. Если spec равно Qt::OffsetFromUTC, и offsetSeconds равно 0, то spec будет установлено в Qt::UTC, то есть смещение 0 секунд.
Если spec равно Qt::TimeZone, то spec будет установлено в Qt::LocalTime, то есть текущий часовой пояс системы.
См. также toMSecsSinceEpoch() и setMSecsSinceEpoch().
[static, since 5.2] QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
Возвращает дату и время, которые являются количеством миллисекунд msecs, прошедших с 1970-01-01T00:00:00.000 по Всемирному координированному времени (Qt::UTC) и с заданным timeZone.
Эта функция была добавлена в Qt 5.2.
См. также fromSecsSinceEpoch().
[static, since 5.5] QDateTime QDateTime::fromNSDate(const NSDate *date)
Создаёт новый объект QDateTime, содержащий копию NSDate date.
Эта функция была добавлена в Qt 5.5.
См. также toNSDate().
[static, since 5.8] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0)
Возвращает дату и время, которые являются количеством секунд secs, прошедших с 1970-01-01T00:00:00.000 по Всемирному координированному времени (Qt::UTC) и преобразуются в заданный spec.
Обратите внимание, что возможны значения secs, которые лежат вне допустимого диапазона QDateTime, как отрицательные, так и положительные. Поведение этой функции не определено для этих значений.
Если spec не равно Qt::OffsetFromUTC, то offsetSeconds будет проигнорировано. Если spec равно Qt::OffsetFromUTC, и offsetSeconds равно 0, то spec будет установлено в Qt::UTC, то есть смещение 0 секунд.
Если spec равно Qt::TimeZone, то spec будет установлено в Qt::LocalTime, то есть текущий часовой пояс системы.
Эта функция была добавлена в Qt 5.8.
См. также toSecsSinceEpoch() и setSecsSinceEpoch().
[static, since 5.8] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone)
Возвращает дату и время, которые являются количеством секунд secs, прошедших с 1970-01-01T00:00:00.000 по Всемирному координированному времени (Qt::UTC) и с заданным timeZone.
Эта функция была добавлена в Qt 5.8.
См. также fromMSecsSinceEpoch().
[static] QDateTime QDateTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
Возвращает QDateTime, представленный строкой string, используя заданный format, или некорректную дату и время, если это невозможно.
Примечание для Qt::TextDate: распознаются только краткие английские названия месяцев (например, "Jan" в краткой форме или "January" в полной форме).
См. также toString() и QLocale::toDateTime().
[static, since 6.0] QDateTime QDateTime::fromString(QStringView string, Qt::DateFormat format = Qt::TextDate)
Это перегруженная функция.
Эта функция была добавлена в Qt 6.0.
[static, since 6.0] QDateTime QDateTime::fromString(QStringView string, QStringView format, QCalendar cal = QCalendar())
Это перегруженный функция.
Эта функция была добавлена в Qt 6.0.
[static, since 6.0] QDateTime QDateTime::fromString(const QString &string, QStringView format, QCalendar cal = QCalendar())
Это перегруженный функция.
Эта функция была добавлена в Qt 6.0.
[static] QDateTime QDateTime::fromString(const QString &string, const QString &format, QCalendar cal = QCalendar())
Возвращает QDateTime, представленный строкой string, используя заданный формат, или недействительную дату и время, если строка не может быть обработана.
Использует календарь cal, если задан, иначе григорианский.
Помимо выражений, распознаваемых в строке формата для представления частей даты и времени, методами QDate::fromString() и QTime::fromString(), этот метод поддерживает:
| Выражение | Вывод |
|---|---|
| t | часовой пояс (например, "CEST") |
Если спецификатор формата 't' отсутствует, используется местный часовой пояс системы. По умолчанию для всех других полей см. QDate::fromString() и QTime::fromString().
Например:
QDateTime dateTime = QDateTime::fromString("1.30.1", "M.d.s");
// dateTime is January 30 in 1900 at 00:00:01.
dateTime = QDateTime::fromString("12", "yy");
// dateTime is January 1 in 1912 at 00:00:00. Все остальные символы ввода будут обрабатываться как текст. Любая непустая последовательность символов, заключенная в одинарные кавычки, также будет обрабатываться (без кавычек) как текст и не будет интерпретироваться как выражение.
QTime time1 = QTime::fromString("131", "HHh");
// time1 is 13:00:00
QTime time1 = QTime::fromString("1apA", "1amAM");
// time1 is 01:00:00
QDateTime dateTime2 = QDateTime::fromString("M1d1y9800:01:02",
"'M'M'd'd'y'yyhh:mm:ss");
// dateTime is 1 January 1998 00:01:02 Если формат не соблюдается, возвращается недействительная QDateTime. Если формат соблюдается, но string представляет недействительную дату и время (например, в разрыве, пропускаемом при переходе часового пояса), возвращается недействительная QDateTime, чья функция toMSecsSinceEpoch() представляет близкую действительную дату и время. Передача этого значения в fromMSecsSinceEpoch() вернёт действительную дату и время, которая не отображается корректно в парсинге строки.
Выражения без ведущих нулей (d, M, h, m, s, z) будут жадными. Это означает, что они будут использовать два знака (или три для z), даже если это выведет их за пределы диапазона и/или оставит слишком мало знаков для других разделов.
QDateTime dateTime = QDateTime::fromString("130", "Mm"); // invalid Это могло означать 1 января 00:30.00, но M возьмёт два знака.
Неправильно указанные поля в string приведут к возвращению недействительной QDateTime. Например, рассмотрим следующий код, где двухзначный год 12 читается как 1912 (см. таблицу ниже для всех значений по умолчанию); полученная дата и время недействительны, потому что 23 апреля 1912 года было вторником, а не понедельником:
QString string = "Monday, 23 April 12 22:51:41"; QString format = "dddd, d MMMM yy hh:mm:ss"; QDateTime invalid = QDateTime::fromString(string, format);
Правильный код:
QString string = "Tuesday, 23 April 12 22:51:41"; QString format = "dddd, d MMMM yy hh:mm:ss"; QDateTime valid = QDateTime::fromString(string, format);
Примечание: Названия дней и месяцев, а также обозначения AM/PM должны быть на английском языке (локаль C). Если используются локализованные названия месяцев и дней и локализованные формы AM/PM, используйте QLocale::system().toDateTime().
См. также toString(), QDate::fromString(), QTime::fromString() и QLocale::toDateTime().
[since 5.2] bool QDateTime::isDaylightTime() const
Возвращает значение, показывающее, попадает ли эта дата и время в летнее время.
Если Qt::TimeSpec не равно Qt::LocalTime или Qt::TimeZone, всегда возвращает false.
Эта функция была добавлена в Qt 5.2.
См. также timeSpec().
bool QDateTime::isNull() const
Возвращает true если и дата, и время равны null; в противном случае возвращает false. Нулевая дата и время недействительны.
См. также QDate::isNull(), QTime::isNull() и isValid().
bool QDateTime::isValid() const
Возвращает true если и дата, и время действительны, и они действительны в текущем Qt::TimeSpec, в противном случае возвращает false.
Если timeSpec() равно Qt::LocalTime или Qt::TimeZone, проверяется, попадают ли дата и время в промежуток времени перехода с летнего на стандартное время, т. е. если переход происходит в 2 часа утра, и время переходит на 3 часа утра, то время с 02:00:00 до 02:59:59.999 считается недействительным.
См. также QDateTime::YearRange, QDate::isValid() и QTime::isValid().
qint64 QDateTime::msecsTo(const QDateTime &other) const
Возвращает количество миллисекунд от этой даты и времени до даты и времени other. Если дата и время other раньше, возвращаемое значение отрицательно.
Перед сравнением обе даты и время преобразуются в Qt::UTC, чтобы обеспечить правильность результата, если летнее время (DST) применяется к одной из двух дат и времени, но не к другой.
Возвращает 0, если одна из дат и времени недействительна.
См. также addMSecs(), daysTo() и QTime::msecsTo().
[since 5.2] int QDateTime::offsetFromUtc() const
Возвращает сдвиг этой даты и времени относительно UTC в секундах.
Результат зависит от timeSpec():
-
Qt::UTCСдвиг равен 0. -
Qt::OffsetFromUTCСдвиг равен исходному значению. -
Qt::LocalTimeВозвращается сдвиг местного времени относительно UTC. -
Qt::TimeZoneВозвращается сдвиг, используемый часовым поясом.
В последних двух случаях возвращается сдвиг на эту дату и время с учётом летнего времени, если только дата не предшествует началу 1970 года. Сдвиг — это разность между местным временем или временем в заданном часовом поясе и временем UTC; он положителен для часовых поясов, опережающих UTC (восточнее Гринвичского меридиана), отрицателен для тех, которые отстают от UTC (западнее Гринвичского меридиана).
Эта функция была добавлена в Qt 5.2.
См. также setOffsetFromUtc().
qint64 QDateTime::secsTo(const QDateTime &other) const
Возвращает количество секунд от этой даты и времени до даты и времени other. Если дата и время other раньше, возвращаемое значение отрицательно.
Перед сравнением обе даты и время преобразуются в Qt::UTC, чтобы обеспечить правильность результата, если летнее время (DST) применяется к одной из двух дат и времени, но не к другой.
Возвращает 0, если одна из дат и времени недействительна.
Пример:
QDateTime now = QDateTime::currentDateTime();
QDateTime xmas(QDate(now.date().year(), 12, 25).startOfDay());
qDebug("There are %d seconds to Christmas", now.secsTo(xmas)); См. также addSecs(), daysTo() и QTime::secsTo().
void QDateTime::setDate(QDate date)
Устанавливает часть даты этой даты и времени на date. Если время ещё не установлено, оно устанавливается в полночь. Если date недействительна, эта QDateTime становится недействительной.
См. также date(), setTime() и setTimeSpec().
void QDateTime::setMSecsSinceEpoch(qint64 msecs)
Устанавливает дату и время, используя количество миллисекунд msecs, прошедших с 1970-01-01T00:00:00.000, по координированному всемирному времени (Qt::UTC). На системах, которые не поддерживают часовые пояса, эта функция будет работать так, как если бы местное время было Qt::UTC.
Обратите внимание, что передача минимального значения qint64 (std::numeric_limits<qint64>::min()) в msecs приведёт к неопределённому поведению.
См. также toMSecsSinceEpoch() и setSecsSinceEpoch().
[since 5.2] void QDateTime::setOffsetFromUtc(int offsetSeconds)
Устанавливает timeSpec() на Qt::OffsetFromUTC и сдвиг на offsetSeconds. Дата и время будут относиться к другой точке во времени.
Максимальный и минимальный сдвиг — 14 часов в положительном или отрицательном направлении. Если offsetSeconds больше или меньше этого, результат будет неопределённым.
Если offsetSeconds равен 0, то timeSpec() будет установлено на Qt::UTC.
Эта функция была добавлена в Qt 5.2.
См. также isValid() и offsetFromUtc().
[since 5.8] void QDateTime::setSecsSinceEpoch(qint64 secs)
Устанавливает дату и время, используя количество секунд secs, прошедших с 1970-01-01T00:00:00.000, по координированному всемирному времени (Qt::UTC). На системах, которые не поддерживают часовые пояса, эта функция будет работать так, как если бы местное время было Qt::UTC.
Эта функция была добавлена в Qt 5.8.
См. также toSecsSinceEpoch() и setMSecsSinceEpoch().
void QDateTime::setTime(QTime time)
Устанавливает часть времени этого объекта datetime в time. Если time некорректна, эта функция устанавливает её в полночь. Поэтому, можно очистить установленное время в QDateTime, установив его в значение по умолчанию QTime:
QDateTime dt = QDateTime::currentDateTime(); dt.setTime(QTime());
См. также time(), setDate() и setTimeSpec().
void QDateTime::setTimeSpec(Qt::TimeSpec spec)
Устанавливает временной спектр, используемый в этом объекте datetime, в spec. Объект datetime будет ссылаться на другую точку во времени.
Если spec равен Qt::OffsetFromUTC, то timeSpec() будет установлено в Qt::UTC, т. е. эффективный сдвиг равен 0.
Если spec равен Qt::TimeZone, то спектр будет установлен в Qt::LocalTime, т. е. текущая часовая зона системы.
Пример:
QDateTime local(QDateTime::currentDateTime()); qDebug() << "Local time is:" << local; QDateTime UTC(local); UTC.setTimeSpec(Qt::UTC); qDebug() << "UTC time is:" << UTC; qDebug() << "There are" << local.secsTo(UTC) << "seconds difference between the datetimes.";
См. также timeSpec(), setDate(), setTime(), setTimeZone() и Qt::TimeSpec.
[since 5.2] void QDateTime::setTimeZone(const QTimeZone &toZone)
Устанавливает часовую зону, используемую в этом объекте datetime, в toZone. Объект datetime будет ссылаться на другую точку во времени.
Если toZone некорректна, то объект datetime будет некорректным.
Эта функция была добавлена в Qt 5.2.
См. также timeZone() и Qt::TimeSpec.
[since 5.0] void QDateTime::swap(QDateTime &other)
Меняет местами этот объект datetime с other. Эта операция очень быстрая и никогда не терпит неудач.
Эта функция была добавлена в Qt 5.0.
QTime QDateTime::time() const
Возвращает часть времени datetime.
См. также setTime(), date() и timeSpec().
Qt::TimeSpec QDateTime::timeSpec() const
Возвращает временной спектр datetime.
См. также setTimeSpec(), date(), time() и Qt::TimeSpec.
[since 5.2] QTimeZone QDateTime::timeZone() const
Возвращает часовую зону datetime.
Если timeSpec() равен Qt::LocalTime, то будет возвращён экземпляр текущей часовой зоны системы. Однако, обратите внимание, что при копировании этой часовой зоны, экземпляр не будет синхронизироваться, если часовая зона системы изменится.
Эта функция была добавлена в Qt 5.2.
См. также setTimeZone() и Qt::TimeSpec.
[since 5.2] QString QDateTime::timeZoneAbbreviation() const
Возвращает сокращение часовой зоны datetime.
Если timeSpec() равен Qt::UTC, это будет "UTC".
Если timeSpec() равен Qt::OffsetFromUTC, это будет в формате "UTC[+-]00:00".
Если timeSpec() равен Qt::LocalTime, то для получения корректного сокращения будет запрошена система.
Обратите внимание, что сокращения могут быть или не быть локализованными.
Также обратите внимание, что сокращение не гарантируется как уникальное значение, т.е. разные часовые зоны могут иметь одинаковое сокращение.
Эта функция была добавлена в Qt 5.2.
См. также timeSpec().
[since 5.5] CFDateRef QDateTime::toCFDate() const
Создаёт CFDate из QDateTime.
Вызывающий владеет объектом CFDate и отвечает за его освобождение.
Эта функция была добавлена в Qt 5.5.
См. также fromCFDate().
QDateTime QDateTime::toLocalTime() const
Возвращает datetime, содержащий дату и время из этого datetime, но указанный с использованием определения Qt::LocalTime.
Пример:
QDateTime UTC(QDateTime::currentDateTimeUtc()); QDateTime local(UTC.toLocalTime()); qDebug() << "UTC time is:" << UTC; qDebug() << "Local time is:" << local; qDebug() << "No difference between times:" << UTC.secsTo(local);
См. также toTimeSpec().
qint64 QDateTime::toMSecsSinceEpoch() const
Возвращает datetime в виде количества миллисекунд, прошедших с 1970-01-01T00:00:00.000, по координированному всемирному времени (Qt::UTC).
На системах, не поддерживающих часовые пояса, эта функция будет вести себя так, как будто локальное время было Qt::UTC.
Поведение этой функции не определено, если datetime, хранящийся в этом объекте, некорректен. Однако, для всех корректных дат, эта функция возвращает уникальное значение.
См. также toSecsSinceEpoch() и setMSecsSinceEpoch().
[since 5.5] NSDate *QDateTime::toNSDate() const
Создаёт NSDate из QDateTime.
Объект NSDate автоматически освобождается.
Эта функция была добавлена в Qt 5.5.
См. также fromNSDate().
[since 5.2] QDateTime QDateTime::toOffsetFromUtc(int offsetSeconds) const
Возвращает копию этого datetime, преобразованного в спектр Qt::OffsetFromUTC с заданным offsetSeconds.
Если offsetSeconds равно 0, то будет возвращён UTC datetime.
Эта функция была добавлена в Qt 5.2.
См. также setOffsetFromUtc(), offsetFromUtc() и toTimeSpec().
[since 5.8] qint64 QDateTime::toSecsSinceEpoch() const
Возвращает datetime в виде количества секунд, прошедших с 1970-01-01T00:00:00.000, по координированному всемирному времени (Qt::UTC).
На системах, не поддерживающих часовые пояса, эта функция будет вести себя так, как будто локальное время было Qt::UTC.
Поведение этой функции не определено, если datetime, хранящийся в этом объекте, некорректен. Однако, для всех корректных дат, эта функция возвращает уникальное значение.
Эта функция была добавлена в Qt 5.8.
См. также toMSecsSinceEpoch() и setSecsSinceEpoch().
QString QDateTime::toString(Qt::DateFormat format = Qt::TextDate) const
Это перегруженная функция.
Возвращает datetime в виде строки в указанном формате format.
Если format равен Qt::TextDate, строка форматируется стандартным способом. Дни недели и месяца будут на английском языке. Пример такого формата: "Ср Май 20 03:40:13 1998". Для локализованного формата, см. QLocale::toString().
Если format равен Qt::ISODate, формат строки соответствует расширенному стандарту ISO 8601 для представления дат и времени, имея вид yyyy-MM-ddTHH:mm:ss[Z|[+|-]HH:mm], в зависимости от timeSpec() объекта QDateTime. Если timeSpec() равен Qt::UTC, к строке будет добавлен Z; если timeSpec() равен Qt::OffsetFromUTC, к строке будет добавлен смещение от UTC в часах и минутах. Для включения миллисекунд в дату ISO 8601, используйте format Qt::ISODateWithMs, который соответствует yyyy-MM-ddTHH:mm:ss.zzz[Z|[+|-]HH:mm].
Если format равен Qt::RFC2822Date, строка форматируется в соответствии с RFC 2822.
Если datetime некорректен, будет возвращена пустая строка.
Предупреждение: Формат Qt::ISODate корректен только для годов в диапазоне от 0 до 9999.
См. также fromString(), QDate::toString(), QTime::toString() и QLocale::toString().
QDateTime QDateTime::toTimeSpec(Qt::TimeSpec spec) const
Возвращает копию этого datetime, преобразованного в указанный временной спектр spec.
Если spec равен Qt::OffsetFromUTC, он устанавливается в Qt::UTC. Для установки в Qt::OffsetFromUTC используйте toOffsetFromUtc().
Если spec равен Qt::TimeZone, он устанавливается в Qt::LocalTime, т. е. локальная часовая зона.
Пример:
QDateTime local(QDateTime::currentDateTime()); QDateTime UTC(local.toTimeSpec(Qt::UTC)); qDebug() << "Local time is:" << local; qDebug() << "UTC time is:" << UTC; qDebug() << "No difference between times:" << local.secsTo(UTC);
См. также timeSpec(), toTimeZone() и toOffsetFromUtc().
[since 5.2] QDateTime QDateTime::toTimeZone(const QTimeZone &timeZone) const
Возвращает копию текущей даты и времени, преобразованную в указанную временную зону timeZone.
Эта функция была добавлена в Qt 5.2.
См. также timeZone() и toTimeSpec().
QDateTime QDateTime::toUTC() const
Возвращает дату и время из текущей даты и времени, но указанные с использованием определения Qt::UTC.
Пример:
QDateTime local(QDateTime::currentDateTime()); QDateTime UTC(local.toUTC()); qDebug() << "Local time is:" << local; qDebug() << "UTC time is:" << UTC; qDebug() << "No difference between times:" << local.secsTo(UTC);
См. также toTimeSpec().
Связанные нечленные функции
bool operator!=(const QDateTime &lhs, const QDateTime &rhs)
Возвращает true если lhs отличается от rhs; в противном случае возвращает false.
Два объекта QDateTime отличаются, если различаются компоненты даты, времени или временной зоны. Начиная с версии 5.14, все некорректные QDateTime равны (и меньше всех корректных QDateTime).
См. также operator==().
bool operator<(const QDateTime &lhs, const QDateTime &rhs)
Возвращает true если lhs раньше rhs; в противном случае возвращает false.
См. также operator==().
QDataStream &operator<<(QDataStream &out, const QDateTime &dateTime)
Записывает dateTime в поток out.
См. также Сериализация типов данных Qt.
bool operator<=(const QDateTime &lhs, const QDateTime &rhs)
Возвращает true если lhs раньше или равно rhs; в противном случае возвращает false.
См. также operator==().
bool operator==(const QDateTime &lhs, const QDateTime &rhs)
Возвращает true если lhs идентично rhs; в противном случае возвращает false.
Два объекта QDateTime отличаются, если различаются компоненты даты, времени или временной зоны. Начиная с версии 5.14, все некорректные QDateTime равны (и меньше всех корректных QDateTime).
См. также operator!=(), operator<(), operator<=(), operator>(), и operator>=().
bool operator>(const QDateTime &lhs, const QDateTime &rhs)
Возвращает true если lhs позже rhs; в противном случае возвращает false.
См. также operator==().
bool operator>=(const QDateTime &lhs, const QDateTime &rhs)
Возвращает true если lhs позже или равно rhs; в противном случае возвращает false.
См. также operator==().
QDataStream &operator>>(QDataStream &in, QDateTime &dateTime)
Читает дату и время из потока in в dateTime.
См. также Сериализация типов данных Qt.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.0/qdatetime.html