Spec-Zone.ru › Qt 5.15

Тип QML Date

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

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

Методы

  • строка 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 с функциями, учитывающими локаль.

Функции, принимающие аргумент format, принимают значения перечисления Locale.LongFormat, Locale.ShortFormat, Locale.NarrowFormat или строку, определяющую формат.

Значения перечисления формата

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

Locale.LongFormat Более длинный формат
Locale.ShortFormat Более короткий формат
Locale.NarrowFormat В этом контексте эквивалентно Locale.ShortFormat

Формат, представленный перечислениями, будет зависеть от вашей локали, а также от метода, для которого используется перечисление.

Например, для локали en_US, используются следующие строки формата:

Функция Перечисление локали Строка формата
fromLocaleDateString, toLocaleDateString Locale.LongFormat dddd, MMMM d, yyyy
fromLocaleDateString, toLocaleDateString Locale.ShortFormat M/d/yy
fromLocaleTimeString, toLocaleTimeString Locale.LongFormat h:mm:ss AP t
fromLocaleTimeString, toLocaleTimeString Locale.ShortFormat h:mm AP
fromLocaleString, toLocaleString Locale.LongFormat dddd, MMMM d, yyyy h:mm:ss AP t
fromLocaleString, toLocaleString Locale.ShortFormat M/d/yy h:mm AP

Строки формата

Вы также можете напрямую указать строку формата.

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

Выражение Вывод
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 использует исторические данные (если они доступны), чтобы определить, было ли летнее время в действии для данной даты. Поэтому построение значения даты в 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"));
    }
}

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; все операции доступа к компонентам даты и времени в местном времени включают применение текущего смещения от UTC. Если текущее смещение изменяется из-за обновления часового пояса, движку JS необходимо сообщить об этом, чтобы он мог пересчитать смещение.

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

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

property string selectedTimeZone

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

string toLocaleDateString(locale, format)

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

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

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

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

import QtQuick 2.0

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

string toLocaleString(locale, format)

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

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

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

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

import QtQuick 2.0

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

string 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.15/qml-qtqml-date.html

Spec-Zone.ru

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