Spec-Zone.ru › Qt 5.9

Тип QML Date

Предоставляет функции работы с датами Подробнее...

Заявление об импорте: import QtQml 2.2
  • Список всех членов, включая унаследованные

Методы

  • строка fromLocaleDateString(locale, dateString, format)
  • строка fromLocaleString(locale, dateTimeString, format)
  • строка fromLocaleTimeString(locale, timeString, format)
  • строка timeZoneUpdated()
  • строка toLocaleDateString(locale, format)
  • строка toLocaleString(locale, format)
  • строка toLocaleTimeString(locale, format)

Подробное описание

Объект QML Date расширяет объект JS Date с функциями, учитывающими локаль.

Функции, принимающие формат локали, могут быть либо значением перечисления:

Locale.LongFormat Полная форма строки; например, возвращает "Январь" как имя месяца.
Locale.ShortFormat Сокращенная форма строки; например, возвращает "Янв" как имя месяца.
Locale.NarrowFormat Специальная форма для использования при ограниченном пространстве; например, возвращает "Я" как имя месяца. Обратите внимание, что узкий формат может содержать один и тот же текст для разных месяцев и дней, или даже быть пустой строкой, если локаль не поддерживает узкие имена, поэтому следует избегать его использования для форматирования дат. Кроме того, для системной локали этот формат такой же, как ShortFormat.

или строкой, определяющей формат. Эти выражения могут использоваться для форматирования дат:

Выражение Вывод
d день в виде числа без ведущего нуля (от 1 до 31)
dd день в виде числа с ведущим нулем (от 01 до 31)
ddd сокращенное локальное название дня (например, 'Пн' до 'Вс').
dddd полное локальное название дня (например, 'Понедельник' до 'Воскресенье').
M месяц в виде числа без ведущего нуля (от 1 до 12)
MM месяц в виде числа с ведущим нулем (от 01 до 12)
MMM сокращенное локальное название месяца (например, 'Янв' до 'Дек').
MMMM полное локальное название месяца (например, 'Январь' до 'Декабрь').
yy год в виде числа из двух цифр (от 00 до 99)
yyyy год в виде числа из четырёх цифр. Если год отрицательный, перед ним добавляется знак минус.

Все остальные символы входных данных будут игнорироваться. Любая последовательность символов, заключённых в одинарные кавычки, будет обрабатываться как текст и не будет использоваться как выражение. Два последовательных одинарных кавычки ("''") заменяются одним одинарным кавычкой в выводе.

Примеры строк форматирования (предполагая, что дата — 20 июля 1969 года):

Формат Результат
dd.MM.yyyy 20.07.1969
ddd MMMM d yy Вс Июль 20 69
'День это' dddd День это Воскресенье

Эти выражения могут использоваться для форматирования времени:

Выражение Вывод
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)
zzz миллисекунды с ведущими нулями (000 до 999)
AP или A использовать отображение AM/PM. AP будет заменено либо "AM", либо "PM".
ap или a использовать отображение am/pm. ap будет заменено либо "am", либо "pm".
t часовой пояс (например, "CEST")

Все остальные символы входных данных будут игнорироваться. Любая последовательность символов, заключённых в одинарные кавычки, будет обрабатываться как текст и не будет использоваться как выражение. Два последовательных одинарных кавычки ("''") заменяются одним одинарным кавычкой в выводе.

Примеры строк форматирования (предполагая, что QTime — 14:13:09.042)

Формат Результат
hh:mm:ss.zzz 14:13:09.042
h:m:s ap 2:13:9 pm
H:m:s a 14:13:9 pm

Если дата некорректна, будет возвращена пустая строка.

Примечание: Использование функций, учитывающих локаль, для форматирования даты или времени может привести к неправильному форматированию времени из-за несоответствия в спецификации между Qt и JS. ECMA-262 определяет, что исторические даты должны интерпретироваться путем проектирования текущих правил летнего времени на прошлые годы, в то время как Qt использует исторические данные (если они доступны), чтобы определить, действовало ли летнее время для данной даты. Поэтому построение значения даты в JS и преобразование его в строку с помощью функций, учитывающих локаль, может дать неверный результат на один час, если DST в настоящее время действует, в то время как он не действовал для указанного времени, или наоборот.

Примечание: Существуют разные форматы дат с различным пониманием отрицательных годов. В обычном языке нет года 0. Год после 1 до н. э. — 1 н. э. Это понимание отражается при печати или анализе дат в одном из форматов, не стандартизированных в ECMAScript. То есть: toString(), toLocaleString(), toUTCString() и аналогичные функции. ECMAScript стандартизирует один формат: ISO 8601. Именно его вы получаете при вызове toISOString(). Этот формат включает год 0, который в других форматах — 1 до н. э. Таким образом, вы получите разные годы при печати отрицательных дат с toISOString() и toString().

При установке года с помощью конструктора Date или set(UTC)FullYear(), используется соглашение, установленное ISO 8601, и 0 является допустимым годом. Это означает, что отрицательные годы, заданные с помощью конструктора или set(UTC)FullYear(), являются нулевыми и, следовательно, сдвинуты на один год по отношению к тому, что печатается с помощью toString() и т. п. Анализ выходных данных любого из методов to*String() приведет к тому же значению даты, которое вы напечатали. Date.parse() распознает различные форматы и их соглашение о существовании года 0.

Обратите внимание, что всё это отличается от того, что вы получите в других реализациях JavaScript, которые обычно обрабатывают год 0 как допустимый во всех строковых представлениях. Поскольку форматы дат являются "зависящими от реализации" в стандарте ECMAScript, это всё ещё допустимо.

См. также Locale.

Документация по методам

строка fromLocaleDateString(locale, dateString, format)

Преобразует строку даты dateString в объект Date с использованием locale и format.

Если format не указан, будет использоваться Locale.LongFormat.

Если locale не указан, будет использоваться локаль по умолчанию.

Следующий пример показывает, как текущая дата сначала форматируется как строка даты с использованием локальной и формата по умолчанию, а затем снова анализируется таким же образом:

import QtQml 2.0

QtObject {
    property var locale: Qt.locale()
    property date currentDate: new Date()
    property string dateString

    Component.onCompleted: {
        dateString = currentDate.toLocaleDateString();
        print(Date.fromLocaleDateString(dateString));
    }
}

строка fromLocaleString(locale, dateTimeString, format)

Преобразует строку даты и времени dateTimeString в объект Date с использованием locale и format.

Если format не указан, будет использоваться Locale.LongFormat.

Если locale не указан, будет использоваться локаль по умолчанию.

Следующий пример показывает, как дата и время анализируются из строки даты и времени в определённом формате с использованием локальной по умолчанию:

import QtQml 2.0

QtObject {
    property var locale: Qt.locale()
    property string dateTimeString: "Tue 2013-09-17 10:56:06"

    Component.onCompleted: {
        print(Date.fromLocaleString(locale, dateTimeString, "ddd yyyy-MM-dd hh:mm:ss"));
    }
}

строка fromLocaleTimeString(locale, timeString, format)

Преобразует строку времени timeString в объект Date с использованием locale и format.

Если format не указан, будет использоваться Locale.LongFormat.

Если locale не указан, будет использоваться локаль по умолчанию.

Следующий пример показывает, как текущее время сначала форматируется как строка времени с использованием локальной и сокращенного формата по умолчанию, а затем снова анализируется таким же образом:

import QtQml 2.2

QtObject {
    property var locale: Qt.locale()
    property date currentTime: new Date()
    property string timeString

    Component.onCompleted: {
        timeString = currentTime.toLocaleTimeString(locale, Locale.ShortFormat);
        print(Date.fromLocaleTimeString(locale, timeString, Locale.ShortFormat));
    }
}

строка timeZoneUpdated()

Сообщает движку JS, что часовой пояс системы был изменен, что необходимо для правильной обработки данных даты и времени.

JS хранит объекты Date в формате UTC; весь доступ к компонентам даты и времени в локальном времени включает применение текущего смещения от UTC. Если текущее смещение изменяется из-за обновления часового пояса, движок JS должен быть уведомлён, чтобы он мог пересчитать смещение.

Эта функция должна вызываться после обновления часового пояса системы.

Например, приложение, которое меняет часовой пояс, вызовет timeZoneUpdated() после установки нового часового пояса:

property string selectedTimeZone

onSelectedTimeZoneChanged: {
    MyFunctions.setSystemTimeZone(selectedTimeZone)
    Date.timeZoneUpdated()
}

строка toLocaleDateString(locale, format)

Преобразует дату в строку, содержащую дату, подходящую для указанного locale в указанном формате.

Если format не указан, будет использоваться Locale.LongFormat.

Если locale не указан, будет использоваться значение по умолчанию.

Следующий пример демонстрирует текущую дату, отформатированную для немецкого языка:

import QtQuick 2.0

Text {
    text: "The date is: " + new Date().toLocaleDateString(Qt.locale("de_DE"))
}

строка toLocaleString(locale, format)

Преобразует дату в строку, содержащую дату и время, подходящую для указанного locale в указанном формате.

Если format не указан, будет использоваться Locale.LongFormat.

Если locale не указан, будет использоваться значение по умолчанию.

Следующий пример демонстрирует текущую дату и время, отформатированные для немецкого языка:

import QtQuick 2.0

Text {
    text: "The date is: " + new Date().toLocaleString(Qt.locale("de_DE"))
}

строка toLocaleTimeString(locale, format)

Преобразует дату в строку, содержащую время, подходящее для указанного locale в указанном формате.

Если format не указан, будет использоваться Locale.LongFormat.

Если locale не указан, будет использоваться значение по умолчанию.

Следующий пример демонстрирует текущее время, отформатированное для немецкого языка:

import QtQuick 2.0

Text {
    text: "The date is: " + new Date().toLocaleTimeString(Qt.locale("de_DE"))
}

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/qml-qtqml-date.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API