Тип QML Date
Предоставляет функции работы с датой. Подробнее...
| Оператор импорта: | import QtQml 2.14 |
Методы
- string fromLocaleDateString(locale, dateString, format)
- string fromLocaleString(locale, dateTimeString, format)
- string fromLocaleTimeString(locale, timeString, format)
- string timeZoneUpdated()
- string toLocaleDateString(locale, format)
- string toLocaleString(locale, format)
- string 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.
Документация по методам
string 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));
}
} string 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"));
}
} string 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));
}
} string 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/qt-5.14/qml-qtqml-date.html