このページでは

Date JavaScript オブジェクト

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ロケール短縮形式M/d/yy
fromLocaleTimeString、toLocaleTimeStringロケール長形式h:mm:ss AP t
fromLocaleTimeString、toLocaleTimeStringロケール短縮形式h:mm AP
fromLocaleString、toLocaleStringロケール長形式dddd, 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 は一つの書式を標準化しています: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標準では、日付の書式は "実装依存 "なので、これはまだ有効です。

文字列 Date::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"))
}

文字列 Date::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"))
}

文字列 Date::toLocaleTimeString(locale, format)

Date::toLocaleTimeString(locale, format) 日付を、指定されたformat の指定されたlocale に適した時刻を含む文字列に変換します。

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

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

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

import QtQuick 2.0

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

文字列 Date::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"));
    }
}

文字列 Date::fromLocaleDateString(locale, dateString, format)

日付文字列dateString を、localeformat を使って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));
    }
}

文字列 Date::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));
    }
}

文字列 Date::timeZoneUpdated()

システムのタイムゾーンが変更されたことを JS エンジンに通知します。

JSはDateオブジェクトをUTC時間で保存します。ローカル時間でのDateコンポーネントへのアクセスやDateコンポーネントからのアクセスには、UTCからの現在のオフセットが適用されます。タイムゾーンが更新されて現在のオフセットが変更された場合、JSエンジンに通知してオフセットを再計算させる必要があります。

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

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

property string selectedTimeZone

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

Localeも参照してください

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.