Класс QDateTime
Класс QDateTime предоставляет функции работы с датой и временем. Подробнее...
| Заголовок: | #include <QDateTime> |
| qmake: | QT += core |
Примечание: Все функции в этом классе являются повторно-входными.
Открытые типы
| Перечисление | YearRange { First, Last } |
Открытые функции
| QDateTime(QDateTime &&other) | |
| QDateTime(const QDateTime &other) | |
| QDateTime(const QDate &date, const QTime &time, const QTimeZone &timeZone) | |
| QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec, int offsetSeconds) | |
| QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec = Qt::LocalTime) | |
| QDateTime(const QDate &date) | |
| 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(const QDate &date) |
| void | setMSecsSinceEpoch(qint64 msecs) |
| void | setOffsetFromUtc(int offsetSeconds) |
| void | setSecsSinceEpoch(qint64 secs) |
| void | setTime(const 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) const |
| QString | toString(Qt::DateFormat format = Qt::TextDate) const |
| QString | toString(QStringView format) const |
| QDateTime | toTimeSpec(Qt::TimeSpec spec) const |
| QDateTime | toTimeZone(const QTimeZone &timeZone) const |
| QDateTime | toUTC() const |
| bool | operator!=(const QDateTime &other) const |
| bool | operator<(const QDateTime &other) const |
| bool | operator<=(const QDateTime &other) const |
| bool | operator==(const QDateTime &other) const |
| bool | operator>(const QDateTime &other) const |
| bool | operator>=(const QDateTime &other) const |
Статические открытые члены
| QDateTime | текущаяДатаВремя() |
| QDateTime | текущаяДатаВремяUtc() |
| qint64 | текущиеМиллисекундыСЭпохи() |
| qint64 | текущиеСекундыСЭпохи() |
| QDateTime | изCFDate(CFDateRef date) |
| QDateTime | изМиллисекундСЭпохи(qint64 msecs) |
| QDateTime | изМиллисекундСЭпохи(qint64 msecs, Qt::TimeSpec spec, 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 | изСтроки(const QString &string, const QString &format, QCalendar cal) |
Связанные нечленные функции
| QDataStream & | operator<<(QDataStream &out, const QDateTime &dateTime) |
| 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 не учитывает високосных секунд.
Замечания
Нет года 0
Нет года 0. Даты в этом году считаются недопустимыми. Год -1 — это год "до Рождества Христова" или "до текущей эры". День перед 1 января 1 г. н. э. — 31 декабря 1 г. до н. э.
Диапазон допустимых дат
Диапазон значений, которые может представлять QDateTime, зависит от реализации внутреннего хранения. QDateTime в настоящее время хранится в qint64 как значение serial 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(), которые используют формат [+|-]hh:mm, фактически ограничивая диапазон +/- 99 часами и 59 минутами, и только целыми минутами. Обратите внимание, что в настоящее время ни одна временная зона не находится за пределами диапазона +/- 14 часов.
См. также QDate, QTime, QDateTimeEdit и QTimeZone.
Документация по типам членов
перечисление QDateTime::YearRange
Это перечисление описывает диапазон годов (в григорианском календаре), представимых QDateTime:
| Постоянная | Значение | Описание |
|---|---|---|
QDateTime::First |
-292275056 |
Поздние части этого года представимы |
QDateTime::Last |
+292278994 |
Ранние части этого года представимы |
Все даты, строго находящиеся между этими двумя годами, также могут быть представлены. Однако обратите внимание, что в григорианском календаре нет года ноль.
Примечание: QDate может описывать даты в более широком диапазоне лет. Для большинства целей это мало чем отличается, так как диапазон лет, который QDateTime может поддерживать, достигает 292 миллионов лет по обе стороны от 1970 года.
Этот перечисление был введён или изменён в Qt 5.14.
Документация по функциям-членам
QString QDateTime::toString(QStringView format) const
QString QDateTime::toString(const QString &format) const
Возвращает дату и время в виде строки. Параметр format определяет формат результирующей строки. Смотрите QTime::toString() и QDate::toString() для поддерживаемых спецификаторов для времени и даты соответственно.
Любая последовательность символов, заключённых в одинарные кавычки, будет включена в выходную строку дословно (без кавычек), даже если она содержит символы форматирования. Две последовательные одинарные кавычки ("''") заменяются одной одинарной кавычкой в выводе. Все остальные символы в строке формата включаются в выходную строку дословно.
Форматы без разделителей (например, "ddMM") поддерживаются, но следует использовать их с осторожностью, так как результирующие строки не всегда надёжно читаемы (например, если "dM" производит "212", это может означать либо 2 декабря, либо 21 февраля).
Примеры строк формата (предполагается, что QDateTime — 21 мая 2001 г. 14:13:09.120):
| Формат | Результат |
|---|---|
| dd.MM.yyyy | 21.05.2001 |
| ddd MMMM d yy | Втор Май 21 01 |
| hh:mm:ss.zzz | 14:13:09.120 |
| hh:mm:ss.z | 14:13:09.12 |
| h:m:s ap | 2:13:9 pm |
Если дата и время недействительны, возвращается пустая строка.
См. также fromString(), QDate::toString(), QTime::toString() и QLocale::toString().
QDateTime::QDateTime(QDateTime &&other)
Перемещает содержимое временной переменной other в этот объект и оставляет other в неопределённом (но корректном) состоянии.
Эта функция была добавлена в Qt 5.8.
QDateTime::QDateTime(const QDateTime &other)
Создаёт копию даты и времени other.
QDateTime::QDateTime(const QDate &date, const QTime &time, const QTimeZone &timeZone)
Создаёт дату и время с заданной date и time, используя часовой пояс, заданный параметром timeZone.
Если date действительна, а time — нет, время будет установлено в 00:00:00.
Если timeZone недействительна, то дата и время будут недействительны.
Эта функция была добавлена в Qt 5.2.
QDateTime::QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec, int offsetSeconds)
Создаёт дату и время с заданной 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 используйте соответствующий конструктор.
Эта функция была добавлена в Qt 5.2.
QDateTime::QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec = Qt::LocalTime)
Создаёт дату и время с заданной date и time, используя спецификацию времени, определённую параметром spec.
Если date действительна, а time — нет, время будет установлено в полночь.
Если spec равен Qt::OffsetFromUTC, то он будет установлен в Qt::UTC, т.е. смещение равно 0 секунд. Для создания даты и времени с Qt::OffsetFromUTC используйте соответствующий конструктор.
Если spec равен Qt::TimeZone, то spec будет установлен в Qt::LocalTime, т.е. текущий часовой пояс системы. Для создания даты и времени с Qt::TimeZone используйте соответствующий конструктор.
QDateTime::QDateTime(const QDate &date)
Создаёт дату и время с заданной date, действительным временем (00:00:00.000) и устанавливает timeSpec() в Qt::LocalTime.
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.
Эта функция была добавлена в Qt 4.7.
См. также currentDateTime(), QDate::currentDate(), QTime::currentTime() и toTimeSpec().
[static] qint64 QDateTime::currentMSecsSinceEpoch()
Возвращает количество миллисекунд, прошедших с 1970-01-01T00:00:00 по универсальному координированному времени (UTC). Это значение аналогично переменной POSIX time_t, но выражено в миллисекундах.
Эта функция была добавлена в Qt 4.7.
См. также currentDateTime(), currentDateTimeUtc(), toTime_t() и toTimeSpec().
[static] qint64 QDateTime::currentSecsSinceEpoch()
Возвращает количество секунд, прошедших с 1970-01-01T00:00:00 по универсальному координированному времени (UTC).
Эта функция была добавлена в 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] QDateTime QDateTime::fromCFDate(CFDateRef date)
Создаёт новый объект QDateTime содержащий копию CFDate date.
Эта функция была добавлена в Qt 5.5.
См. также toCFDate().
[static] QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs)
Возвращает дату и время, представляющие количество миллисекунд msecs, прошедших с 1970-01-01T00:00:00.000 по универсальному координированному времени (UTC), и преобразуется в местное время. В системах, не поддерживающих часовые пояса, время будет установлено так, как если бы местное время было UTC.
Обратите внимание, что существуют возможные значения msecs, которые лежат вне допустимого диапазона QDateTime, как отрицательные, так и положительные. Поведение этой функции не определено для этих значений.
Эта функция была добавлена в Qt 4.7.
См. также toMSecsSinceEpoch() и setMSecsSinceEpoch().
[static] QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs, Qt::TimeSpec spec, int offsetSeconds = 0)
Возвращает дату и время, представляющие количество миллисекунд msecs, прошедших с 1970-01-01T00:00:00.000 по универсальному координированному времени (UTC), преобразованные к заданному spec.
Обратите внимание, что существуют возможные значения msecs, которые лежат вне допустимого диапазона QDateTime, как отрицательные, так и положительные. Поведение этой функции не определено для этих значений.
Если spec не Qt::OffsetFromUTC, то offsetSeconds игнорируется. Если spec Qt::OffsetFromUTC и offsetSeconds равно 0, то spec устанавливается в Qt::UTC, т.е. смещение 0 секунд.
Если spec Qt::TimeZone, то spec устанавливается в Qt::LocalTime, т.е. в текущий часовой пояс системы.
Эта функция была добавлена в Qt 5.2.
См. также toMSecsSinceEpoch() и setMSecsSinceEpoch().
[static] QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
Возвращает дату и время, представляющие количество миллисекунд msecs, прошедших с 1970-01-01T00:00:00.000 по универсальному координированному времени (UTC) и с заданным timeZone.
Эта функция была добавлена в Qt 5.2.
См. также fromSecsSinceEpoch().
[static] QDateTime QDateTime::fromNSDate(const NSDate *date)
Создаёт новый QDateTime содержащий копию NSDate date.
Эта функция была добавлена в Qt 5.5.
См. также toNSDate().
[static] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0)
Возвращает дату и время, представляющие количество секунд secs, прошедших с 1970-01-01T00:00:00.000 по универсальному координированному времени (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] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone)
Возвращает дату и время, представляющие количество секунд secs, прошедших с 1970-01-01T00:00:00.000 по универсальному координированному времени (UTC) и с заданным timeZone.
Эта функция была добавлена в Qt 5.8.
См. также fromMSecsSinceEpoch().
[static] QDateTime QDateTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
Возвращает QDateTime, представленную строкой string, используя заданный format, или недействительную дату и время, если это невозможно.
Примечание для Qt::TextDate: Рекомендуется использовать английские короткие названия месяцев (например, "Jan"). Хотя можно использовать и локализованные названия месяцев, они зависят от настроек локали пользователя.
См. также toString() и QLocale::toDateTime().
[static] QDateTime QDateTime::fromString(const QString &string, const QString &format, QCalendar cal)
Возвращает QDateTime, представленную строкой string, используя заданный format, или недействительную дату и время, если строка не может быть проанализирована.
Использует календарь cal, если он задан, иначе григорианский.
См. QDate::fromString() и QTime::fromString() для выражений, распознаваемых в строке формата для представления частей даты и времени. Все остальные символы ввода будут обрабатываться как текст. Любая последовательность символов, заключенная в одинарные кавычки, также будет обрабатываться как текст и не будет использоваться как выражение.
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. Выражения без ведущих нулей (d, M, h, m, s, z) будут жадными. Это означает, что они будут использовать две цифры, даже если это выведет их за пределы диапазона и/или оставит недостаточно цифр для других разделов.
QDateTime dateTime = QDateTime::fromString("130", "Mm"); // invalid Это могло означать 1 января 00:30.00, но M захватит две цифры.
Неправильно заданные поля в строке приведут к возврату недействительной 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);
Для любого поля, которое не представлено в формате, используются следующие значения по умолчанию:
| Поле | Значение по умолчанию |
|---|---|
| Год | 1900 |
| Месяц | 1 (январь) |
| День | 1 |
| Час | 0 |
| Минута | 0 |
| Секунда | 0 |
Например:
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. См. такжеtoString(), QDate::fromString(), QTime::fromString() и QLocale::toDateTime().
bool QDateTime::isDaylightTime() const
Возвращает значение true, если данное время попадает в летнее время, иначе false.
Если 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().
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(const 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 приведет к неопределенному поведению.
Эта функция была добавлена в Qt 4.7.
См. такжеtoMSecsSinceEpoch() и setSecsSinceEpoch().
void QDateTime::setOffsetFromUtc(int offsetSeconds)
Устанавливает timeSpec() на Qt::OffsetFromUTC и смещение на offsetSeconds. Момент времени будет относиться к другому моменту.
Максимальное и минимальное смещение составляет 14 положительных или отрицательных часов. Если offsetSeconds больше или меньше этого, результат не определен.
Если offsetSeconds равно 0, то timeSpec() будет установлено на Qt::UTC.
Эта функция была добавлена в Qt 5.2.
См. такжеisValid() и offsetFromUtc().
void QDateTime::setSecsSinceEpoch(qint64 secs)
Устанавливает дату и время, учитывая количество секунд secs, прошедших с 1970-01-01T00:00:00.000, по координированному всемирному времени (Qt::UTC). На системах, не поддерживающих часовые пояса, эта функция будет вести себя так, как если бы местное время было Qt::UTC.
Эта функция была добавлена в Qt 5.8.
См. такжеtoSecsSinceEpoch() и setMSecsSinceEpoch().
void QDateTime::setTime(const QTime &time)
Устанавливает часть времени в этом моменте времени на time. Если time недействительна, функция устанавливает его на полночь. Таким образом, можно очистить любое установленное время в QDateTime, установив его на значение по умолчанию QTime:
QDateTime dt = QDateTime::currentDateTime(); dt.setTime(QTime());
См. такжеtime(), setDate() и setTimeSpec().
void QDateTime::setTimeSpec(Qt::TimeSpec spec)
Устанавливает спецификацию времени, используемую в этом моменте времени, на spec. Момент времени будет относиться к другому моменту времени.
Если 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.
void QDateTime::setTimeZone(const QTimeZone &toZone)
Устанавливает часовой пояс, используемый в этом моменте времени, на toZone. Момент времени будет относиться к другому моменту времени.
Если toZone недействительна, то и момент времени будет недействительным.
Эта функция была добавлена в Qt 5.2.
См. такжеtimeZone() и Qt::TimeSpec.
void QDateTime::swap(QDateTime &other)
Меняет местами эту дату и время с other. Эта операция очень быстрая и никогда не терпит неудачу.
Эта функция была добавлена в Qt 5.0.
QTime QDateTime::time() const
Возвращает часть времени даты и времени.
См. также setTime(), date() и timeSpec().
Qt::TimeSpec QDateTime::timeSpec() const
Возвращает спецификацию времени даты и времени.
См. также setTimeSpec(), date(), time() и Qt::TimeSpec.
QTimeZone QDateTime::timeZone() const
Возвращает часовой пояс даты и времени.
Если timeSpec() равен Qt::LocalTime, возвращается экземпляр текущего часового пояса системы. Однако обратите внимание, что если вы скопируете этот часовой пояс, экземпляр не будет оставаться синхронизированным, если часовой пояс системы изменится.
Эта функция была добавлена в Qt 5.2.
См. также setTimeZone() и Qt::TimeSpec.
QString QDateTime::timeZoneAbbreviation() const
Возвращает сокращение часового пояса для даты и времени.
Если timeSpec() равен Qt::UTC, это будет "UTC".
Если timeSpec() равен Qt::OffsetFromUTC, это будет в формате "UTC[+-]00:00".
Если timeSpec() равен Qt::LocalTime, для получения правильного сокращения запрашивается система.
Обратите внимание, что сокращения могут быть или не быть локализованными.
Также обратите внимание, что сокращение не гарантируется как уникальное значение, т.е. разные часовые пояса могут иметь одинаковое сокращение.
Эта функция была добавлена в Qt 5.2.
См. также timeSpec().
CFDateRef QDateTime::toCFDate() const
Создаёт CFDate из QDateTime. Вызывающий владеет объектом CFDate и отвечает за его освобождение.
Эта функция была добавлена в Qt 5.5.
См. также fromCFDate().
QDateTime QDateTime::toLocalTime() const
Возвращает дату и время, содержащие информацию о дате и времени в этой дате и времени, но указанную с использованием определения 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
Возвращает дату и время как количество миллисекунд, прошедших с 1970-01-01T00:00:00.000, по координированному всемирному времени (Qt::UTC).
На системах, которые не поддерживают часовые пояса, эта функция будет вести себя так, как если бы местное время было Qt::UTC.
Поведение этой функции не определено, если дата и время, хранящиеся в этом объекте, не являются допустимыми. Однако для всех допустимых дат эта функция возвращает уникальное значение.
Эта функция была добавлена в Qt 4.7.
См. также toSecsSinceEpoch() и setMSecsSinceEpoch().
NSDate *QDateTime::toNSDate() const
Создаёт NSDate из QDateTime. Объект NSDate автоматически освобождается.
Эта функция была добавлена в Qt 5.5.
См. также fromNSDate().
QDateTime QDateTime::toOffsetFromUtc(int offsetSeconds) const
Возвращает копию этой даты и времени, преобразованной в спецификацию Qt::OffsetFromUTC с заданным offsetSeconds.
Если offsetSeconds равно 0, возвращается дата и время UTC.
Эта функция была добавлена в Qt 5.2.
См. также setOffsetFromUtc(), offsetFromUtc() и toTimeSpec().
qint64 QDateTime::toSecsSinceEpoch() const
Возвращает дату и время как количество секунд, прошедших с 1970-01-01T00:00:00.000, по координированному всемирному времени (Qt::UTC).
На системах, которые не поддерживают часовые пояса, эта функция будет вести себя так, как если бы местное время было Qt::UTC.
Поведение этой функции не определено, если дата и время, хранящиеся в этом объекте, не являются допустимыми. Однако для всех допустимых дат эта функция возвращает уникальное значение.
Эта функция была добавлена в Qt 5.8.
См. также toMSecsSinceEpoch() и setSecsSinceEpoch().
QString QDateTime::toString(Qt::DateFormat format = Qt::TextDate) const
Это перегруженная функция.
Возвращает дату и время в виде строки в заданном формате format.
Если format равен Qt::TextDate, строка форматируется по умолчанию. Названия дня и месяца будут локализованными именами, использующими системный язык, т.е. QLocale::system(). Пример такого форматирования: "Ср Май 20 03:40:13 1998".
Если 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::SystemLocaleShortDate или Qt::SystemLocaleLongDate, формат строки зависит от настроек языка системы. Идентично вызову QLocale::system().toString(datetime, QLocale::ShortFormat) или QLocale::system().toString(datetime, QLocale::LongFormat).
Если format равен Qt::DefaultLocaleShortDate или Qt::DefaultLocaleLongDate, формат строки зависит от языка по умолчанию приложения. Это язык по умолчанию, установленный с помощью QLocale::setDefault(), или системный язык, если язык по умолчанию не был установлен. Идентично вызову QLocale().toString(datetime, QLocale::ShortFormat) или QLocale().toString(datetime, QLocale::LongFormat).
Если format равен Qt::RFC2822Date, строка форматируется в соответствии с RFC 2822.
Если дата и время недопустимы, возвращается пустая строка.
Предупреждение: формат Qt::ISODate действителен только для годов в диапазоне от 0 до 9999. Это ограничение может также применяться к локализованным форматам, в зависимости от настроек языка.
См. также fromString(), QDate::toString(), QTime::toString() и QLocale::toString().
QDateTime QDateTime::toTimeSpec(Qt::TimeSpec spec) const
Возвращает копию этой даты и времени, преобразованную в заданную спецификацию времени 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().
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 QDateTime::operator!=(const QDateTime &other) const
Возвращает true если эта дата и время отличаются от даты и времени other; в противном случае возвращает false.
Две даты и времени отличаются, если различаются компоненты даты, времени или часового пояса. Начиная с 5.14, любая недопустимая дата и время меньше всех допустимых дат и времени.
См. также operator==().
bool QDateTime::operator<(const QDateTime &other) const
Возвращает true если эта дата и время раньше, чем other; в противном случае возвращает false.
bool QDateTime::operator<=(const QDateTime &other) const
Возвращает true если эта дата и время раньше или равна other; в противном случае возвращает false.
bool QDateTime::operator==(const QDateTime &other) const
Возвращает true если эта дата и время равна other; в противном случае возвращает false.
Начиная с версии 5.14, все недействительные даты и время равны друг другу и отличаются от всех других дат и времени.
См. также operator!=().
bool QDateTime::operator>(const QDateTime &other) const
Возвращает true если эта дата и время позже, чем other; в противном случае возвращает false.
bool QDateTime::operator>=(const QDateTime &other) const
Возвращает true если эта дата и время позже или равна other; в противном случае возвращает false.
Связанные нечлены
QDataStream &operator<<(QDataStream &out, const QDateTime &dateTime)
Записывает dateTime в поток out.
См. также Сериализация типов данных Qt.
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-5.14/qdatetime.html