Класс QDateTime
Класс QDateTime предоставляет функции работы с датой и временем. Подробнее...
| Заголовок: | #include <QDateTime> |
| qmake: | QT += core |
Примечание: Все функции в этом классе являются реентерабельными.
Общедоступные функции
| QDateTime() | |
| QDateTime(const QDate &date) | |
| QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec = Qt::LocalTime) | |
| QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec, int offsetSeconds) | |
| QDateTime(const QDate &date, const QTime &time, const QTimeZone &timeZone) | |
| QDateTime(const QDateTime &other) | |
| QDateTime(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 |
| 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 |
| QDateTime & | operator=(QDateTime &&other) |
| QDateTime & | operator=(const QDateTime &other) |
| 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) |
Связанные нечлены
| QDataStream & | operator<<(QDataStream &out, const QDateTime &dateTime) |
| QDataStream & | operator>>(QDataStream &in, QDateTime &dateTime) |
Подробное описание
Класс QDateTime предоставляет функции для работы с датой и временем.
Объект QDateTime содержит календарную дату и время (дата и время). Это комбинация классов QDate и QTime. Он может считывать текущую дату и время из системных часов. Он предоставляет функции для сравнения дат и времени и для изменения даты и времени путём добавления определённого количества секунд, дней, месяцев или лет.
Объект QDateTime обычно создаётся, либо задавая дату и время явно в конструкторе, либо используя статическую функцию currentDateTime(), которая возвращает объект QDateTime, установленный на текущее время системы. Дату и время можно изменить с помощью функций setDate() и setTime(). Дату и время можно также установить, используя функцию setTime_t(), которая принимает значение в формате POSIX (количество секунд с момента 00:00:00 1 января 1970 года). Функция fromString() возвращает QDateTime, заданное строкой и форматом даты для интерпретации даты в строке.
Функции date() и time() предоставляют доступ к частям даты и времени даты и времени. Та же информация предоставляется в текстовом формате функцией toString().
QDateTime предоставляет полный набор операторов для сравнения двух объектов QDateTime, где меньшее значение означает более раннее время, а большее — более позднее.
Можно увеличить (или уменьшить) дату и время на заданное количество миллисекунд, используя addMSecs(), секунд с помощью addSecs() или дней с помощью addDays(). Аналогично, можно использовать addMonths() и addYears(). Функция daysTo() возвращает количество дней между двумя датами и временем, secsTo() возвращает количество секунд, а msecsTo() возвращает количество миллисекунд между двумя датами и временем.
QDateTime может хранить даты и время как локальное время или время UTC. QDateTime::currentDateTime() возвращает QDateTime, выраженное в местном времени; используйте toUTC(), чтобы преобразовать его в UTC. Также можно использовать timeSpec(), чтобы узнать, хранит ли объект QDateTime время UTC или местное время. Такие операции, как addSecs() и secsTo(), учитывают летнее время (DST).
Примечание: QDateTime не учитывает високосные секунды.
Отсутствует год 0
Года 0 не существует. Даты в этом году считаются недействительными. Год -1 — год «до Рождества Христова» или «до современной эры». День перед 1 января 1 года н. э. — 31 декабря 1 года до н. э.
Диапазон допустимых дат
Диапазон допустимых значений, которые может хранить QDateTime, зависит от реализации внутренней структуры хранения. В настоящее время QDateTime хранится в qint64 как последовательное значение msecs, кодирующее дату и время. Это ограничивает диапазон дат примерно +/- 292 миллионами лет по сравнению с диапазоном QDate +/- 2 миллиарда лет. Следует соблюдать осторожность при создании QDateTime с экстремальными значениями, чтобы не переполнить хранилище. Точный диапазон поддерживаемых значений зависит от Qt::TimeSpec и часового пояса.
Использование системного часового пояса
QDateTime использует информацию о часовом поясе системы для определения смещения местного времени от UTC. Если система настроена неправильно или устарела, QDateTime даст неправильные результаты.
Летнее время (DST)
QDateTime учитывает информацию о часовом поясе системы при работе с летним временем (DST). В современных системах Unix это означает, что она применяет правильные исторические данные о DST, когда это возможно. В Windows, где система не поддерживает исторические данные о DST, историческая точность не поддерживается относительно DST.
Диапазон допустимых дат с учётом летнего времени составляет с 1970-01-01 по настоящее время, и действуют правила для корректной обработки летнего времени до 2037-12-31, но они могут измениться. Для дат, выходящих за этот диапазон, QDateTime делает лучшую попытку, используя правила для года 1970 или 2037, но мы не можем гарантировать точность. Это означает, что QDateTime не учитывает изменения часового пояса локали до 1970 года, даже если база данных часовых поясов системы поддерживает эту информацию.
QDateTime учитывает переход от стандартного времени к летнему времени. Например, если переход происходит в 2 часа ночи, и часы переводятся вперёд на 3 часа, то существует «пропущенный» час с 02:00:00 до 02:59:59.999, который QDateTime считает недействительным. Любые вычисления с датой и временем учтут этот пропущенный час и вернут действительный результат.
Смещение от UTC
Также поддерживается Qt::TimeSpec типа Qt::OffsetFromUTC. Это позволяет определить QDateTime относительно UTC со фиксированным смещением в заданное количество секунд от UTC. Например, смещение +3600 секунд соответствует одному часу вперёд по UTC и обычно записывается в стандартной нотации ISO как «UTC+01:00». Летнее время никогда не применяется с этим TimeSpec.
Нет явного ограничения размера смещения в секундах, но есть неявное ограничение, накладываемое при использовании методов toString() и fromString(), которые используют формат [+|-]чч:мм, эффективно ограничивая диапазон до +/- 99 часов и 59 минут, и только целыми минутами. Обратите внимание, что в настоящее время ни один часовой пояс не выходит за пределы +/- 14 часов.
Поддержка часовых поясов
Также поддерживается Qt::TimeSpec типа Qt::TimeZone в сочетании с классом QTimeZone. Это позволяет определять дату и время в заданном часовом поясе, придерживаясь согласованного набора правил перехода на летнее время. Например, часовой пояс «Europe/Berlin» будет применять правила летнего времени, используемые в Германии с 1970 года. Обратите внимание, что применяемые правила перехода зависят от поддержки платформы. Подробнее см. документацию QTimeZone.
См. также QDate, QTime, QDateTimeEdit и QTimeZone.
Документация по членам-функциям
QDateTime::QDateTime()
Конструирует нулевую дату и время (т.е. нулевую дату и нулевое время). Нулевая дата и время недействительны, так как дата недействительна.
См. также isValid().
QDateTime::QDateTime(const QDate &date)
Конструирует дату и время с заданной date, допустимым временем (00:00:00.000) и устанавливает timeSpec() в Qt::LocalTime.
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, 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, const QTimeZone &timeZone)
Конструирует дату и время с заданной date и time, используя временную зону, указанную в timeZone.
Если date валидна, а time нет, время будет установлено в 00:00:00.
Если timeZone невалидна, то дата и время будут невалидными.
Данная функция была добавлена в Qt 5.2.
QDateTime::QDateTime(const QDateTime &other)
Создаёт копию даты и времени other.
QDateTime::QDateTime(QDateTime &&other)
Перемещает содержимое временной метки other в этот объект и оставляет other в неопределённом (но корректном) состоянии.
Данная функция была добавлена в Qt 5.8.
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().
QDateTime QDateTime::currentDateTime()
Возвращает текущую дату и время, полученные с системных часов, в местной временной зоне.
См. также currentDateTimeUtc(), QDate::currentDate(), QTime::currentTime() и toTimeSpec().
QDateTime QDateTime::currentDateTimeUtc()
Возвращает текущую дату и время, полученные с системных часов, в UTC.
Данная функция была добавлена в Qt 4.7.
См. также currentDateTime(), QDate::currentDate(), QTime::currentTime() и toTimeSpec().
qint64 QDateTime::currentMSecsSinceEpoch()
Возвращает количество миллисекунд, прошедших с 1970-01-01T00:00:00 по всемирному координированному времени. Это число подобно переменной POSIX time_t, но выражено в миллисекундах.
Данная функция была добавлена в Qt 4.7.
См. также currentDateTime(), currentDateTimeUtc(), toTime_t() и toTimeSpec().
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().
QDateTime QDateTime::fromCFDate(CFDateRef date)
Конструирует новый QDateTime, содержащий копию CFDate date.
Данная функция была добавлена в Qt 5.5.
См. также toCFDate().
QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs)
Возвращает объект QDateTime, дата и время которого соответствуют числу миллисекунд msecs, прошедших с 1970-01-01T00:00:00.000 по координированному всемирному времени (Qt::UTC) и преобразованному в Qt::LocalTime. На системах, не поддерживающих часовые пояса, время будет установлено так, как если бы местное время было Qt::UTC.
Обратите внимание, что существуют возможные значения для msecs, которые лежат за пределами допустимого диапазона QDateTime, как отрицательные, так и положительные. Поведение этой функции не определено для этих значений.
Эта функция была введена в Qt 4.7.
См. также toMSecsSinceEpoch() и setMSecsSinceEpoch().
[static] QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs, Qt::TimeSpec spec, int offsetSeconds = 0)
Возвращает объект QDateTime, дата и время которого соответствуют числу миллисекунд 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, т.е. текущий часовой пояс системы.
Эта функция была введена в Qt 5.2.
См. также toMSecsSinceEpoch() и setMSecsSinceEpoch().
[static] QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
Возвращает объект QDateTime, дата и время которого соответствуют числу миллисекунд msecs, прошедших с 1970-01-01T00:00:00.000 по координированному всемирному времени (Qt::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)
Возвращает объект QDateTime, дата и время которого соответствуют числу секунд 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] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone)
Возвращает объект QDateTime, дата и время которого соответствуют числу секунд 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, или недействительный объект QDateTime, если это невозможно.
Примечание для Qt::TextDate: Рекомендуется использовать английские сокращённые названия месяцев (например, "Jan"). Хотя можно использовать и локализованные названия месяцев, они зависят от настроек региональных параметров пользователя.
См. также toString() и QLocale::toDateTime().
[static] QDateTime QDateTime::fromString(const QString &string, const QString &format)
Возвращает объект QDateTime, представленный строкой string, используя заданный format, или недействительный объект QDateTime, если строка не может быть обработана.
Эти выражения могут быть использованы для части даты строки формата:
| Выражение | Вывод |
|---|---|
| d | день как число без ведущего нуля (1 до 31) |
| dd | день как число с ведущим нулём (01 до 31) |
| ddd | сокращённое локализованное название дня (например, 'Пн' до 'Вс'). Использует QDate::shortDayName(). |
| dddd | полное локализованное название дня (например, 'Понедельник' до 'Воскресенье'). Использует QDate::longDayName(). |
| M | месяц как число без ведущего нуля (1-12) |
| MM | месяц как число с ведущим нулём (01-12) |
| MMM | сокращённое локализованное название месяца (например, 'Янв' до 'Дек'). Использует QDate::shortMonthName(). |
| MMMM | полное локализованное название месяца (например, 'Январь' до 'Декабрь'). Использует QDate::longMonthName(). |
| yy | год как двузначное число (00-99) |
| yyyy | год как четырёхзначное число |
Примечание: В отличие от других версий этой функции, имена дней и месяцев должны быть указаны на языке пользователя. Использовать английские имена возможно только если язык пользователя — английский.
Эти выражения могут быть использованы для части времени строки формата:
| Выражение | Вывод |
|---|---|
| h | час без ведущего нуля (0 до 23 или 1 до 12, если используется AM/PM) |
| hh | час с ведущим нулём (00 до 23 или 01 до 12, если используется AM/PM) |
| H | час без ведущего нуля (0 до 23, даже с AM/PM) |
| HH | час с ведущим нулём (00 до 23, даже с AM/PM) |
| m | минута без ведущего нуля (0 до 59) |
| mm | минута с ведущим нулём (00 до 59) |
| s | целая секунда без ведущего нуля (0 до 59) |
| ss | целая секунда с ведущим нулём, где это применимо (00 до 59) |
| z | дробная часть секунды, после десятичной точки, без хвостовых нулей (0 до 999). Таким образом, "s.z" сообщает о секундах с полной доступной (миллисекундной) точностью без хвостовых нулей. |
| zzz | дробная часть секунды с точностью до миллисекунды, включая хвостовые нули, где это применимо (000 до 999). |
| AP или A | интерпретируется как AM/PM время. AP должно быть либо "AM", либо "PM". |
| ap или a | Интерпретируется как AM/PM время. ap должно быть либо "am", либо "pm". |
Все остальные символы ввода будут рассматриваться как текст. Любая последовательность символов, заключённая в одинарные кавычки, также будет рассматриваться как текст и не будет использоваться как выражение.
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 возьмёт два знака.
Неправильно указанные поля в строке string приведут к возвращению недействительного QDateTime. Например, рассмотрим следующий код, где двузначный год 12 читается как 1912 (см. таблицу ниже для всех значений по умолчанию); полученный объект QDateTime недействителен, потому что 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, если данное время попадает на летнее время.
Если Qt::TimeSpec не равно Qt::LocalTime или Qt::TimeZone, то всегда возвращает false.
Эта функция была добавлена в Qt 5.2.
См. также timeSpec().
bool QDateTime::isNull() const
Возвращает true , если дата и время равны null; в противном случае возвращает false. Нулевое значение QDateTime является недопустимым.
См. также 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 считается недопустимым.
См. также QDate::isValid() и QTime::isValid().
qint64 QDateTime::msecsTo(const QDateTime &other) const
Возвращает количество миллисекунд от текущего QDateTime до QDateTime other. Если QDateTime other раньше, чем текущее, возвращаемое значение отрицательное.
Перед сравнением оба QDateTime преобразуются в Qt::UTC для обеспечения корректного результата, если летнее время (DST) применяется к одному из QDateTime, но не к другому.
Возвращает 0, если любой из QDateTime недопустим.
См. также addMSecs(), daysTo(), и QTime::msecsTo().
int QDateTime::offsetFromUtc() const
Возвращает текущий сдвиг относительно UTC в секундах.
Если timeSpec() равно Qt::OffsetFromUTC, это будет значение, первоначально заданное.
Если timeSpec() равно Qt::TimeZone, это будет сдвиг, действующий в часовом поясе, включая любой сдвиг летнего времени.
Если timeSpec() равно Qt::LocalTime, это будет разница между местным временем и UTC, включая любой сдвиг летнего времени.
Если timeSpec() равно Qt::UTC, это будет 0.
Эта функция была добавлена в Qt 5.2.
См. также setOffsetFromUtc().
qint64 QDateTime::secsTo(const QDateTime &other) const
Возвращает количество секунд от текущего QDateTime до QDateTime other. Если QDateTime other раньше, чем текущее, возвращаемое значение отрицательное.
Перед сравнением оба QDateTime преобразуются в Qt::UTC для обеспечения корректного результата, если летнее время (DST) применяется к одному из QDateTime, но не к другому.
Возвращает 0, если любой из QDateTime недопустим.
Пример:
QDateTime now = QDateTime::currentDateTime();
QDateTime xmas(QDate(now.date().year(), 12, 25), QTime(0, 0));
qDebug("There are %d seconds to Christmas", now.secsTo(xmas)); См. также addSecs(), daysTo(), и QTime::secsTo().
void QDateTime::setDate(const QDate &date)
Устанавливает часть даты этого QDateTime на 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. QDateTime будет ссылаться на другую точку во времени.
Максимальный и минимальный сдвиг составляет 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)
Устанавливает часть времени этого QDateTime на time. Если time некорректно, эта функция устанавливает её на полночь. Поэтому, можно очистить установленное время в QDateTime, установив его на значение по умолчанию для QTime:
QDateTime dt = QDateTime::currentDateTime(); dt.setTime(QTime());
См. также time(), setDate(), и setTimeSpec().
void QDateTime::setTimeSpec(Qt::TimeSpec spec)
Устанавливает спецификацию времени, используемую в QDateTime, на spec. QDateTime будет ссылаться на другую точку во времени.
Если 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)
Устанавливает часовой пояс, используемый в QDateTime, на toZone. QDateTime будет ссылаться на другую точку во времени.
Если toZone некорректно, QDateTime будет некорректным.
Эта функция была добавлена в Qt 5.2.
См. также timeZone() и Qt::TimeSpec.
void QDateTime::swap(QDateTime &other)
Меняет местами этот QDateTime и other. Эта операция очень быстрая и никогда не терпит неудачу.
Эта функция была добавлена в Qt 5.0.
QTime QDateTime::time() const
Возвращает часть времени QDateTime.
См. также setTime(), date(), и timeSpec().
Qt::TimeSpec QDateTime::timeSpec() const
Возвращает спецификацию времени QDateTime.
См. также setTimeSpec(), date(), time(), и Qt::TimeSpec.
QTimeZone QDateTime::timeZone() const
Возвращает часовой пояс QDateTime.
Если 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
Возвращает дату и время, содержащие информацию о дате и времени в этом объекте 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
Возвращает дату и время в виде количества миллисекунд, прошедших с 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(const QString &format) const
Возвращает дату и время в виде строки. Параметр format определяет формат результирующей строки.
Эти выражения могут быть использованы для даты:
| Выражение | Вывод |
|---|---|
| d | день как число без ведущего нуля (1–31) |
| dd | день как число с ведущим нулем (01–31) |
| ddd | сокращенное локализованное имя дня (например, 'Пн' по 'Вс'). Использует системную локаль для локализации имени, т. е. QLocale::system(). |
| dddd | полное локализованное имя дня (например, 'Понедельник' по 'Воскресенье'). Использует системную локаль для локализации имени, т. е. QLocale::system(). |
| M | месяц как число без ведущего нуля (1–12) |
| MM | месяц как число с ведущим нулем (01–12) |
| MMM | сокращенное локализованное имя месяца (например, 'Янв' по 'Дек'). Использует системную локаль для локализации имени, т. е. QLocale::system(). |
| MMMM | полное локализованное имя месяца (например, 'Январь' по 'Декабрь'). Использует системную локаль для локализации имени, т. е. QLocale::system(). |
| yy | год как двузначное число (00–99) |
| yyyy | год как четырехзначное число |
Эти выражения могут быть использованы для времени:
| Выражение | Вывод |
|---|---|
| h | час без ведущего нуля (0–23 или 1–12, если отображаются AM/PM) |
| hh | час с ведущим нулем (00–23 или 01–12, если отображаются AM/PM) |
| H | час без ведущего нуля (0–23, даже с отображением AM/PM) |
| HH | час с ведущим нулем (00–23, даже с отображением AM/PM) |
| m | минута без ведущего нуля (0–59) |
| mm | минута с ведущим нулем (00–59) |
| s | целая секунда без ведущего нуля (0–59) |
| ss | целая секунда с ведущим нулем, где это применимо (00–59) |
| z | дробная часть секунды, для отображения после десятичной точки, без trailing нулей (0–999). Таким образом, "s.z" сообщает секунды до полной доступной (миллисекундной) точности без trailing нулей. |
| zzz | дробная часть секунды с точностью до миллисекунд, включая trailing нули, где это применимо (000–999). |
| AP или A | использовать отображение AM/PM. A/AP будет заменено либо "AM", либо "PM". |
| ap или a | использовать отображение am/pm. a/ap будет заменено либо "am", либо "pm". |
| t | временная зона (например, "CEST") |
Все остальные символы входных данных будут проигнорированы. Любая последовательность символов, заключенная в одинарные кавычки, будет обрабатываться как текст и не будет использоваться как выражение. Два последовательных одинарных кавычки ("''") заменяются одним одинарным кавычкой в выводе. Форматы без разделителей (например, "HHmm") в настоящее время не поддерживаются.
Примеры строк формата (предполагается, что 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 пп |
Если дата и время недействительны, будет возвращена пустая строка.
См. также fromString(), QDate::toString(), QTime::toString() и QLocale::toString().
QString QDateTime::toString(Qt::DateFormat format = Qt::TextDate) const
Это перегруженная функция.
Возвращает дату и время в виде строки в заданном формате format.
Если format равно Qt::TextDate, строка форматируется стандартным способом. QDate::shortDayName(), QDate::shortMonthName() и QTime::toString() используются для генерации строки, поэтому имена дня и месяца будут локализованными именами, использующими системную локаль, т. е. 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].
Если формат — Qt::SystemLocaleShortDate или Qt::SystemLocaleLongDate, формат строки зависит от настроек локали системы. Идентично вызову QLocale::system().toString(datetime, QLocale::ShortFormat) или QLocale::system().toString(datetime, QLocale::LongFormat).
Если формат — Qt::DefaultLocaleShortDate или Qt::DefaultLocaleLongDate, формат строки зависит от локали по умолчанию приложения. Это локаль, заданная с помощью QLocale::setDefault(), или системная локаль, если локаль по умолчанию не задана. Идентично вызову QLocale().toString(datetime, QLocale::ShortFormat) или QLocale().toString(datetime, QLocale::LongFormat).
Если формат — Qt::RFC2822Date, строка форматируется в соответствии со спецификацией RFC 2822.
Если datetime некорректна, будет возвращена пустая строка.
Предупреждение: Формат 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(), toUTC() и toLocalTime().
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.
Две даты и времени отличаются, если отличаются компоненты даты, времени или часового пояса.
См. также operator==().
bool QDateTime::operator<(const QDateTime &other) const
Возвращает true если текущая дата и время раньше, чем other; в противном случае возвращает false.
bool QDateTime::operator<=(const QDateTime &other) const
Возвращает true если текущая дата и время раньше или равна other; в противном случае возвращает false.
QDateTime &QDateTime::operator=(QDateTime &&other)
Оператор перемещающей присваивания.
QDateTime &QDateTime::operator=(const QDateTime &other)
Создаёт копию other и возвращает ссылку на копию.
bool QDateTime::operator==(const QDateTime &other) const
Возвращает true если текущая дата и время равна other; в противном случае возвращает false.
См. также 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.9/qdatetime.html