Date QML Type

日付関数を提供する。詳細...

Import Statement: import QtQml

メソッド

詳細な説明

QML Date オブジェクトはJS Date オブジェクトをロケール対応関数で拡張したものです。

format の引数を受け取る関数は Locale.LongFormat、 Locale.ShortFormat、 Locale.NarrowFormatの列挙値、または書式を指定する文字列を受け取ります。

サポートされる書式文字列の形式は、QDate::toString()、QTime::toString()、QDateTime::toString()のドキュメントで説明されているとおりである。

日付が無効な場合は空文字列が返される。

書式列挙値

ロケールの環境設定にマッチした書式が必要な場合は、列挙値を使用します。

ロケール.LongFormat長い書式
ロケール.ShortFormatより短いフォーマット
Locale.NarrowFormatこの文脈ではLocale.ShortFormatと同じ

列挙型が表す書式はロケールに依存しますが、その列挙型が使用されるメソッドにも依存します。

例えば、en_US ロケールでは、以下の書式文字列が使用されます:

関数ロケール列挙型フォーマット文字列
fromLocaleDateString,toLocaleDateStringロケール.LongFormatdddd, MMMM d, yyyy
fromLocaleDateString,toLocaleDateStringロケール.ShortFormatM/d/yy
fromLocaleTimeString,toLocaleTimeStringロケール.LongFormath:mm:ss AP t
fromLocaleTimeString,toLocaleTimeStringロケール.ShortFormath:mm AP
fromLocaleString,toLocaleStringロケール.LongFormatdddd, MMMM d, yyyy h:mm:ss AP t
fromLocaleString,toLocaleStringロケール.ShortFormatM/d/yy h:mm AP

その他の注意事項

ロケール対応関数を使用して日付や時刻のフォーマットを行うと、QtとJSの仕様の不一致により、時刻が正しくフォーマットされないことがあります。ECMA-262では、過去の日付は、現在のサマータイム規則を過去の年に投影して解釈すべきであると規定していますが、Qtでは、与えられた日付にサマータイムが適用されていたかどうかを判断するために、過去のデータ(利用可能な場合)を使用します。そのため、JS で Date 値を作成し、ロケール対応関数を使用して文字列に変換すると、現在サマータイムが適用されている場合は 1 時間間違った結果が返され、指定された時間に適用されていない場合はその逆の結果が返されることがあります。

日付の書式にはさまざまなものがあり、負の年に対する理解も異なります。一般的な人間の言語では、0年は存在しない。この理解は、ECMAScriptで標準化されていないフォーマットの1つで日付を印刷または解析するときに反映されます。つまり、toString(),toLocaleString(), toUTCString() などです。ECMAScriptは1つのフォーマットを標準化しています:ISO 8601である。これは、toISOString() を呼び出したときに得られるものです。このフォーマットには年0が含まれており、他のフォーマットでは1BCとなります。そのため、toISOString() や toString() で負の日付を出力すると、異なる年が出力されます。

Date コンストラクタや set(UTC)FullYear() を使用して年を設定する場合は、 ISO 8601 の規約が使用され、0 が有効な年となります。つまり、コンストラクタや set(UTC)FullYear() で設定された負の年はゼロベースとなり、toString() や friends で出力される年とは 1 年分ずれることになります。to*String()メソッドの出力を解析すると、出力された日付と同じ値が得られます。Date.parse()は、異なるフォーマットと、0年の存在に関する規約を認識します。

これは、通常すべての文字列表現で年0を有効なものとして扱う他のJavaScript実装で得られるものとは異なることに注意してください。ECMAScript標準では日付の書式は "実装依存 "なので、これはまだ有効ですが。

Localeも参照してください

メソッド ドキュメンテーション

string fromLocaleDateString(locale, dateString, format)

日付文字列dateStringlocaleformat を使用してDate オブジェクトに変換します。

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 を、localeformat を使用してDate オブジェクトに変換します。

format が指定されていない場合は、Locale.LongFormat が使用される。

locale が指定されていない場合は、デフォルトのロケールが使用されます。

次の例は、デフォルトのロケールを使用して、ある書式の日付文字列からdatetimeをパースしています:

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 を、localeformat を使ってDate オブジェクトに変換します。

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コンポーネントへのアクセスやDateコンポーネントからのアクセスには、UTCからの現在のオフセットが適用されます。タイムゾーンが更新されて現在のオフセットが変更された場合、JSエンジンに通知してオフセットを再計算させる必要があります。

この関数は、システムのタイムゾーンが更新された後に呼び出す必要があります。

たとえば、タイムゾーンを変更するアプリケーションでは、新しいタイムゾーンを設定した後に timeZoneUpdated() を呼び出します:

property string selectedTimeZone

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

string toLocaleDateString(locale, format)

Date を、指定された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)

Dateを、指定された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)

Dateを、指定されたformat の指定されたlocale に適した時刻を含む文字列に変換します。

format が指定されていない場合は、Locale.LongFormat が使用される。

locale が指定されていない場合は、デフォルトのロケールが使用される。

次の例は、ドイツ語ロケール用にフォーマットされた現在時刻を示しています:

import QtQuick 2.0

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

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。