Spec-Zone.ru › Qt

Тип QML Date

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

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

Методы

  • строка 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 или строку, определяющую формат.

Формат поддерживаемых строковых представлений формата описан в документации QDate::toString(), QTime::toString() и QDateTime::toString().

Если дата некорректна, возвращается пустая строка.

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

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

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

Дополнительные замечания

Использование функций, учитывающих локаль, для форматирования даты или времени может привести к неправильному форматированию времени из-за несоответствия спецификаций между Qt и JS. ECMA-262 определяет, что исторические даты должны интерпретироваться, проектируя текущие правила летнего времени на прошлые годы, тогда как Qt использует исторические данные (если доступны) для определения, действовало ли летнее время для заданной даты. Поэтому создание значения Date в JS и преобразование его в строку с помощью функций, учитывающих локаль, может привести к результату, отличающемуся на один час, если Летнее время в настоящее время действует, а не действовало в указанное время, или наоборот.

Существуют различные форматы дат с различным пониманием отрицательных лет. В общем языке нет года 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; все доступ к компонентам даты и времени в локальном времени включает применение текущего смещения от 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-6.2/qml-qtqml-date.html

Spec-Zone.ru

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