Spec-Zone.ru › Qt 5.13

Тип QML Date

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

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

Методы

  • строка 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 н. э. Это понимание отражается при печати или анализе дат в одном из форматов, не стандартизованных 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"));
    }
}

строка 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/qt-5.13/qml-qtqml-date.html

Spec-Zone.ru

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