Тип QML Date
Предоставляет функции для работы с датами. Подробнее...
| Заявление об импорте: | import QtQml 2.11 |
Методы
- строка 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 пп |
| H:m:s a | 14:13:9 пп |
Если дата недействительна, возвращается пустая строка.
Примечание: Использование функций, учитывающих локаль, для форматирования дат или времени может привести к неверно отформатированному времени из-за несоответствия в спецификации между Qt и JS. ECMA-262 определяет, что исторические даты должны интерпретироваться путём проекции текущих правил для перехода на летнее время на прошлые годы, в то время как Qt использует исторические данные (если они доступны) для определения, было ли летнее время в действии для заданной даты. Следовательно, создание значения Date в 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; любой доступ к компонентам Date в локальном времени включает применение текущего смещения от UTC. Если текущее смещение меняется из-за обновления часового пояса, движку JS необходимо сообщить об этом, чтобы он мог пересчитать смещение.
Эта функция должна вызываться после обновления часового пояса системы.
Например, приложение, которое меняет часовой пояс, вызовет timeZoneUpdated() после установки нового часового пояса:
property string selectedTimeZone
onSelectedTimeZoneChanged: {
MyFunctions.setSystemTimeZone(selectedTimeZone)
Date.timeZoneUpdated()
} строка toLocaleDateString(locale, format)
Преобразует дату в строку, содержащую дату, подходящую для указанного locale в указанном format.
Если 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.
Если 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.
Если 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/archives/qt-5.11/qml-qtqml-date.html