Spec-Zone.ru › Qt 6.0

Тип QML Date

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

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

Методы

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

Функции, принимающие аргумент 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 использует исторические данные (если они доступны) для определения, было ли летнее время в действии для данной даты. Поэтому создание значения Date в JS и преобразование его в строку с помощью функций, учитывающих локаль, может дать неверный результат на один час, если DST в настоящее время активен, в то время как он не был активен для указанного времени, или наоборот.

Существуют различные форматы дат с разным пониманием отрицательных годов. Общий человеческий язык не имеет года 0. Год после 1 до н. э. — 1 н. э. Это понимание отражается при печати или анализе дат в одном из форматов, не стандартизованных ECMA Script. Это: toString(), toLocaleString(), toUTCString() и другие. ECMA Script стандартизирует один формат: 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-6.0/qml-qtqml-date.html

Spec-Zone.ru

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