Тип 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 пп |
| 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 не указан, будет использоваться 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/archives/qt-5.6/qml-qtqml-date.html