JavaScript の Date オブジェクト
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 では(利用可能な場合)、過去のデータを使用して、特定の日付に夏時間が適用されていたかどうかを判断します。 そのため、JS で Date 値を構築し、ロケール対応関数を使用して文字列に変換すると、指定された時刻には夏時間が適用されていなかったにもかかわらず、現在夏時間が適用されている場合、結果に 1 時間の誤差が生じる可能性があります。その逆の場合も同様です。
負の年に対する解釈が異なる日付形式がいくつか存在します。 一般的な自然言語には「0年」という概念はありません。紀元前1年の翌年は紀元1年です。この理解は、ECMAScriptで標準化されていない形式(toString()、toLocaleString()、toUTCString()など)で日付を出力または解析する際に反映されます。 ECMAScriptでは、ISO 8601という1つの形式が標準化されています。これは、toISOString()を呼び出した際に得られる形式です。この形式には西暦0年が含まれており、これは他の形式では紀元前1年に相当します。したがって、toISOString()とtoString()で負の日付を出力すると、異なる年が表示されます。
Dateコンストラクタやset(UTC)FullYear()を使用して年を設定する場合、ISO 8601で定められた規則が適用され、0は有効な年として扱われます。つまり、コンストラクタやset(UTC)FullYear()で設定された負の年は0を起点とするため、toString()などのメソッドで出力される値とは1年ずれています。 to*String() メソッドのいずれかの出力を解析すると、出力元と同じ日付値が得られます。Date.parse() は、さまざまな形式や、西暦0年の存在に関する各形式の規則を認識します。
なお、これらは他の JavaScript 実装での動作とは異なります。他の実装では通常、すべての文字列表現において西暦 0 年を有効な値として扱います。ただし、ECMAScript 標準では日付形式は「実装依存」であるため、この挙動は依然として有効です。
string Date::toLocaleString(locale, format)
Date オブジェクトを、指定された `locale ` および `format` に適した日付と時刻を含む文字列に変換します。
format が指定されていない場合、Locale.LongFormat が使用されます。
locale が指定されていない場合は、 が使用されます。
次の例は、ドイツ語ロケールに合わせてフォーマットされた現在の日付と時刻を示しています。
string Date::toLocaleDateString(locale, format)
Date オブジェクトを、指定されたロケール (locale ) およびロケール設定 (format) に基づいて適切な日付形式を含む文字列に変換します。
format が指定されていない場合は、Locale.LongFormat が使用されます。
locale が指定されていない場合は、デフォルトのロケールが使用されます。
次の例は、ドイツ語ロケールに合わせてフォーマットされた現在の日付を示しています。
import QtQuick 2.0
Text {
text: "The date is: " + new Date().toLocaleDateString(Qt.locale("de_DE"))
}string Date::toLocaleTimeString(locale, format)
Date オブジェクトを、指定されたロケール (locale ) およびロケール形式 (format) に応じて適切な時刻を含む文字列に変換します。
format が指定されていない場合は、Locale.LongFormat が使用されます。
locale が指定されていない場合は、 が使用されます。
次の例は、ドイツ語ロケールに合わせてフォーマットされた現在の時刻を示しています:
import QtQuick 2.0
Text {
text: "The date is: " + new Date().toLocaleTimeString(Qt.locale("de_DE"))
}string Date::fromLocaleString(locale, dateTimeString, format)
datetime 文字列 `dateTimeString ` を、`locale ` および `format` を使用してDateオブジェクトに変換します。
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 Date::fromLocaleDateString(locale, dateString, format)
日付文字列 `dateString ` を、`locale ` および `format` を使用して `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 Date::fromLocaleTimeString(locale, timeString, format)
時間文字列 `timeString ` を、`locale ` および `format` を使用して `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 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.