このページでは

QDate Class

QDate クラスは日付関連の関数を提供します。詳細...

ヘッダー: #include <QDate>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

注:このクラスのすべての関数は再入可能である。

QDate の比較

カテゴリ比較可能な型説明
strongQDate
strongstd::chrono::year_month_day、std::chrono::year_month_day_last、std::chrono::year_month_weekday、および std::chrono::year_month_weekday_last。これらの比較演算子は、C++20 を使用している場合にのみ利用可能です。

パブリック関数

QDate()
(since 6.4) QDate(std::chrono::year_month_day date)
(since 6.4) QDate(std::chrono::year_month_day_last date)
(since 6.4) QDate(std::chrono::year_month_weekday date)
(since 6.4) QDate(std::chrono::year_month_weekday_last date)
QDate(int y, int m, int d)
QDate addDays(qint64 ndays) const
(since 6.4) QDate addDuration(std::chrono::days ndays) const
QDate addMonths(int nmonths, QCalendar cal) const
QDate addMonths(int nmonths) const
QDate addYears(int nyears, QCalendar cal) const
QDate addYears(int nyears) const
int day(QCalendar cal) const
int day() const
int dayOfWeek(QCalendar cal) const
int dayOfWeek() const
int dayOfYear(QCalendar cal) const
int dayOfYear() const
int daysInMonth(QCalendar cal) const
int daysInMonth() const
int daysInYear(QCalendar cal) const
int daysInYear() const
qint64 daysTo(QDate d) const
QDateTime endOfDay(const QTimeZone &zone) const
(since 6.5) QDateTime endOfDay() const
void getDate(int *year, int *month, int *day) const
bool isNull() const
bool isValid() const
int month(QCalendar cal) const
int month() const
bool setDate(int year, int month, int day)
bool setDate(int year, int month, int day, QCalendar cal)
QDateTime startOfDay(const QTimeZone &zone) const
(since 6.5) QDateTime startOfDay() const
qint64 toJulianDay() const
std::chrono::sys_days toStdSysDays() const
QString toString(const QString &format, QCalendar cal) const
QString toString(QStringView format) const
QString toString(Qt::DateFormat format = Qt::TextDate) const
QString toString(const QString &format) const
QString toString(QStringView format, QCalendar cal) const
int weekNumber(int *yearNumber = nullptr) const
int year(QCalendar cal) const
int year() const

静的パブリックメンバー

QDate currentDate()
QDate fromJulianDay(qint64 jd)
(since 6.4) QDate fromStdSysDays(const std::chrono::sys_days &days)
QDate fromString(const QString &string, const QString &format, int baseYear, QCalendar cal)
(since 6.0) QDate fromString(QStringView string, Qt::DateFormat format = Qt::TextDate)
QDate fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
(since 6.0) QDate fromString(QStringView string, QStringView format, QCalendar cal)
(since 6.7) QDate fromString(QStringView string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
(since 6.0) QDate fromString(const QString &string, QStringView format, QCalendar cal)
(since 6.7) QDate fromString(const QString &string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
QDate fromString(const QString &string, const QString &format, QCalendar cal)
(since 6.7) QDate fromString(const QString &string, const QString &format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
(since 6.7) QDate fromString(QStringView string, QStringView format, int baseYear, QCalendar cal)
(since 6.0) QDate fromString(const QString &string, QStringView format, int baseYear, QCalendar cal)
bool isLeapYear(int year)
bool isValid(int year, int month, int day)
bool operator!=(const QDate &lhs, const QDate &rhs)
(since 6.11) QDate &operator++(QDate &date)
(since 6.11) QDate operator++(QDate &date, int)
(since 6.11) QDate &operator--(QDate &date)
(since 6.11) QDate operator--(QDate &date, int)
bool operator<(const QDate &lhs, const QDate &rhs)
QDataStream &operator<<(QDataStream &out, QDate date)
bool operator<=(const QDate &lhs, const QDate &rhs)
bool operator==(const QDate &lhs, const QDate &rhs)
bool operator>(const QDate &lhs, const QDate &rhs)
bool operator>=(const QDate &lhs, const QDate &rhs)
QDataStream &operator>>(QDataStream &in, QDate &date)

詳細な説明

QDate オブジェクトは、その作成時に使用された、あるいはシステムによって提供されたカレンダー、ロケール、その他の設定に関係なく、特定の日を表します。このオブジェクトは、プロレプティック・グレゴリオ暦、あるいはQCalendar オブジェクトとして提供された任意のカレンダーに基づいて、その日を表す年、月、日を報告することができます。 QDateオブジェクトは、constへの参照ではなく値渡しで渡すべきです。これらは単にqint64 をカプセル化したものに過ぎません。

QDate オブジェクトは通常、年、月、日の数値を明示的に指定して作成されます。QDate は、100 未満の年数を、オフセットを加えることなく、指定されたまま(つまり 1 年から 99 年として)解釈することに注意してください。静的関数currentDate() は、システムクロックから読み取った日付を含む QDate オブジェクトを作成します。 また、setDate() を使用して、明示的な日付を設定することもできます。fromString() 関数は、文字列と、その文字列内の日付を解釈するために使用される日付形式を受け取り、QDate を返します。

year()、month()、およびday() 関数を使用すると、年、月、日の数値にアクセスできます。これらの値のうち複数が必要になる場合は、QCalendar::partsFromDate() を呼び出す方が効率的です。これにより、(処理負荷が高くなる可能性のある)暦計算の繰り返しを省くことができます。

また、dayOfWeek() およびdayOfYear() 関数も用意されています。toString() 関数により、同じ情報がテキスト形式で提供されます。QLocale は日付番号を名称に、QCalendar は月番号を名称にそれぞれ変換します。

QDate には、2 つの QDate オブジェクトを比較するための完全な演算子セットが用意されており、値が小さいほど日付が早く、値が大きいほど日付が遅いことを意味します。

addDays() を使用すると、指定した日数分だけ日付を繰り上げ(または繰り下げ)ることができます。同様に、addMonths() やaddYears() も使用できます。daysTo() 関数は、2つの日付間の日数を返します。

daysInMonth() 関数とdaysInYear() 関数は、それぞれ指定された日付の月および年に何日あるかを返します。isLeapYear() 関数は、指定された日付が閏年に当たるかどうかを示します。QCalendar もこの情報を提供できますが、場合によってはより便利に利用できることがあります。

備考

注: 文字列形式との相互変換はすべて 、Cロケールを使用して行われます。ロケールに応じた変換については、QLocale を参照してください。

グレゴリオ暦には西暦0年が存在しません。その年の日付は無効とみなされます。西暦-1年は「キリスト前1年」または「共通紀元前1年」に相当します。 西暦1年1月1日の前日、QDate(1, 1, 1) は、紀元前31年12月31日、QDate(-1, 12, 31) となります。他のさまざまな暦も同様に振る舞います。QCalendar::hasYearZero() を参照してください。

有効な日付の範囲

日付は内部的に修正ユリウス日数として格納されます。これは連続した範囲内の各日を整数で数えたもので、グレゴリオ暦の紀元前4714年11月24日がユリウス日0日(ユリウス暦では紀元前4713年1月1日)となります。 これは絶対日付を効率的かつ正確に格納する方法であるだけでなく、ヘブライ暦、イスラム暦、中国暦などの他の暦系への日付変換にも適しています。 QDate では、ユリウス日は深夜 0 時を区切りとしており、QDateTime の場合、datetime が使用するタイムゾーンに基づいて区切られます。(これは、ユリウス日を UTC 正午を区切りとする正式な定義とは異なります。)ユリウス日数はQDate::toJulianDay() を使用して取得でき、QDate::fromJulianDay() を使用して設定できます。

QDateが表現できるユリウス日数の範囲は、技術的な理由により、-784350574879から784354017364に制限されています。これは、紀元前20億年より前から紀元後20億年より後までの期間に相当します。 これは、QDateTime が表現できる日付の範囲の 7 倍以上です。

QTime 、QDateTime 、QCalendar 、QDateTime::YearRange 、QDateEdit 、QDateTimeEdit 、およびQCalendarWidgetも参照してください 。

メンバー関数のドキュメント

[constexpr] QDate::QDate()

NULLの日付を作成します。NULLの日付は無効です。

isNull() およびisValid()も参照してください 。

[constexpr noexcept, since 6.4] QDate::QDate(std::chrono::year_month_day date)

[constexpr noexcept, since 6.4] QDate::QDate(std::chrono::year_month_day_last date)

[constexpr noexcept, since 6.4] QDate::QDate(std::chrono::year_month_weekday date)

[constexpr noexcept, since 6.4] QDate::QDate(std::chrono::year_month_weekday_last date)

date と同じ日付を表す `QDate ` を作成します。これにより、標準ライブラリのカレンダー関連クラスと Qt の日付・時刻クラスとの間で、容易な相互運用が可能になります。

例:

// 23 April 2012:
QDate date = std::chrono::year_month_day(std::chrono::year(2012),
                                        std::chrono::month(4),
                                        std::chrono::day(23));

// Same, under `using std::chrono` convenience:
QDate dateWithLiterals1 = 23d / April / 2012y;
QDate dateWithLiterals2 = 2012y / April / 23;

// Last day of February 2000
QDate lastDayFeb2020 = 2000y / February / last;

// First Monday of January 2020:
QDate firstMonday = 2020y / January / Monday[0];

// Last Monday of January 2020:
QDate lastMonday = 2020y / January / Monday[last];

注: QDateとは異なり 、std::chrono::year および関連クラスには西暦0年が含まれます。つまり、date が西暦0年またはそれ以前の場合、結果として得られるQDate オブジェクトの年は、date で指定された年より1年少なくなります。

注:この 関数を使用するには C++20 が必要です。

これらの関数は Qt 6.4 で導入されました。

QDate::QDate(int y, int m, int d)

年y 、月m 、日d を持つ日付を生成します。

日付はグレゴリオ暦に基づいて解釈されます。指定された日付が無効な場合、日付は設定されず、isValid() はfalse を返します。

警告: 1年から 99年までは そのまま解釈されます。0年は無効です。

isValid() およびQCalendar::dateFromParts()も参照してください 。

QDate QDate::addDays(qint64 ndays) const

このオブジェクトの日付よりも後の日付(ndays )を含むQDate オブジェクトを返します(ndays が負の値の場合は、それより前の日付になります)。

現在の日付が無効であるか、新しい日付が範囲外である場合は、nullの日付を返します。

addMonths()、addYears()、およびdaysTo()も参照してください 。

[since 6.4] QDate QDate::addDuration(std::chrono::days ndays) const

このオブジェクトの日付よりも後の日付(ndays )を含むQDate オブジェクトを返します(ndays が負の値の場合は、それより前の日付になります)。

現在の日付が無効であるか、新しい日付が範囲外である場合は、nullの日付を返します。

注: std::chrono::months またはstd::chrono::years で表される期間を加算しても 、addMonths()やaddYears()を使用した場合と同じ結果は得られません。前者は太陽年を基準として計算される固定期間であるのに対し、後者はグレゴリオ暦の月・年の定義を使用します。

注:この 関数を使用するには C++20 が必要です。

この関数は Qt 6.4 で導入されました。

addMonths()、addYears()、およびdaysTo()も参照してください 。

QDate QDate::addMonths(int nmonths, QCalendar cal) const

このオブジェクトの日付よりも後の日付(nmonths )を含むQDate オブジェクトを返します(nmonths が負の値の場合は、それより前の日付となります)。

cal が指定されている場合はそれをカレンダーとして使用し、指定されていない場合はグレゴリオ暦を使用します。

注: 結果の月/年に指定された日/月の組み合わせが存在しない場合 、この関数は、選択された月の中で最も新しい有効な日付を返します。

addDays() およびaddYears()も参照してください 。

QDate QDate::addMonths(int nmonths) const

この関数は、QDate::addMonths() をオーバーロードしています。

QDate QDate::addYears(int nyears, QCalendar cal) const

このオブジェクトの日付よりも後の日付(nyears )を含むQDate オブジェクトを返します(nyears が負の値の場合は、それより前の日付になります)。

cal が指定されている場合はそれをカレンダーとして使用し、指定されていない場合はグレゴリオ暦を使用します。

注: 結果となる年に末日の日付と月の組み合わせが存在しない場合(例えば、グレゴリオ暦において、日付が2月29日であり、最終年が閏年でない場合など)、この関数は、指定された月の有効な最終日(この例では2月28日)を返します。

関連項目: addDays() およびaddMonths()。

QDate QDate::addYears(int nyears) const

この関数は、QDate::addYears() をオーバーロードしています。

[static] QDate QDate::currentDate()

システムクロックの現在の日付を返します。

QTime::currentTime() およびQDateTime::currentDateTime()も参照してください 。

int QDate::day(QCalendar cal) const

この日付の月内の日を返します。

cal が指定されている場合はそれをカレンダーとして使用し、指定されていない場合はグレゴリオ暦を使用します(この場合、戻り値の範囲は1から31です)。日付が無効な場合は0を返します。

year()、month()、dayOfWeek()、およびQCalendar::partsFromDate()も参照してください 。

int QDate::day() const

この関数は、QDate::day() をオーバーロードしています。

int QDate::dayOfWeek(QCalendar cal) const

この日付の曜日(1 = 月曜日~7 = 日曜日)を返します。

指定された場合、cal をカレンダーとして使用し、指定がない場合はグレゴリオ暦を使用します。日付が無効な場合は 0 を返します。カレンダーによっては、7 より大きい値に特別な意味(例:閏日)が与えられる場合があります。

day()、dayOfYear()、QCalendar::dayOfWeek()、およびQt::DayOfWeekも参照してください 。

int QDate::dayOfWeek() const

この関数は、QDate::dayOfWeek() をオーバーロードしています。

int QDate::dayOfYear(QCalendar cal) const

この日付のその年における日数(1日が1)を返します。

指定された場合、cal をカレンダーとして使用します。指定がない場合はグレゴリオ暦を使用します。日付またはその年の初日が無効な場合は 0 を返します。

day()、dayOfWeek()、およびQCalendar::daysInYear()も参照してください 。

int QDate::dayOfYear() const

この関数は、QDate::dayOfYear() をオーバーロードしています。

int QDate::daysInMonth(QCalendar cal) const

この日付の属する月の日数を返します。

cal が指定された場合はそれをカレンダーとして使用し、指定されていない場合はグレゴリオ暦を使用します(この場合、結果は 28 から 31 の範囲になります)。日付が無効な場合は 0 を返します。

day()、daysInYear()、QCalendar::daysInMonth()、QCalendar::maximumDaysInMonth()、およびQCalendar::minimumDaysInMonth()も参照してください 。

int QDate::daysInMonth() const

この関数は、QDate::daysInMonth() をオーバーロードしています。

int QDate::daysInYear(QCalendar cal) const

この日付のその年の日数を返します。

cal が指定されている場合はそれをカレンダーとして使用し、指定されていない場合はグレゴリオ暦を使用します(この場合、結果は 365 または 366 になります)。日付が無効な場合は 0 を返します。

day()、daysInMonth()、QCalendar::daysInYear()、およびQCalendar::maximumMonthsInYear()も参照してください 。

int QDate::daysInYear() const

この関数は、QDate::daysInYear() をオーバーロードしています。

qint64 QDate::daysTo(QDate d) const

この日付からd までの日数を返します。

これは `d.toJulianDay() - toJulianDay()` と同等です。d がこの日付より前の場合、結果は負の数になります。いずれかの日付が無効な場合は 0 を返します。

例:

QDate d1(1995, 5, 17);  // May 17, 1995
QDate d2(1995, 5, 20);  // May 20, 1995
d1.daysTo(d2);          // returns 3
d2.daysTo(d1);          // returns -3

関連項目: addDays()。

QDateTime QDate::endOfDay(const QTimeZone &zone) const

その日の終了時刻を返します。

1日の終了時刻は、時間の記述方法によって異なります。西側のタイムゾーンでは1日の開始・終了時刻が早くなり、東側のタイムゾーンでは遅くなります。使用する時刻の表現形式は、オプションの時間zone で指定できます。デフォルトの時刻表現は、システムのローカルタイムです。

通常、1日の終わりは深夜0時(24:00)の1ミリ秒前となります。 ただし、タイムゾーンの移行によって指定された日付がその瞬間を飛び越える場合(例:夏時間の「スプリングフォワード」により23:00とその後の1時間がスキップされる場合)、その日の実際の最終時刻が返されます。これは、時刻の表現がタイムゾーンまたはローカルタイムである場合にのみ発生します。

zone のtimeSpec()がQt::OffsetFromUTC またはQt::UTC である場合、時間表現には遷移がないため、その日の終了時刻はQTime (23, 59, 59, 999)となります。

ごくまれに、日付が完全にスキップされる場合(これは、国際日付変更線の東側にあったタイムゾーンが西側に移行した際に発生します)、返される値は無効となります。zone として無効なタイムゾーンを渡した場合も、QDateTime で表現可能な範囲外で終了する日付と同様に、無効な結果が生成されます。

startOfDay()も参照してください 。

[since 6.5] QDateTime QDate::endOfDay() const

この関数は、QDate::endOfDay() をオーバーロードしています。

この関数は Qt 6.5 で導入されました。

[static constexpr] QDate QDate::fromJulianDay(qint64 jd)

ユリウス日jd をQDate に変換します。

toJulianDay()も参照してください 。

[static constexpr noexcept, since 6.4] QDate QDate::fromStdSysDays(const std::chrono::sys_days &days)

1970年1月1日(UNIXエポック)からdays 日後のQDate を返します。days が負の値の場合、返される日付はエポックより前の日付になります。

注:この 関数を使用するには C++20 が必要です。

この関数は Qt 6.4 で導入されました。

toStdSysDays()も参照してください 。

[static] QDate QDate::fromString(const QString &string, const QString &format, int baseYear, QCalendar cal)

string で表されるQDate を、指定されたformat を使用して返します。文字列を解析できない場合は、無効な日付を返します。

cal が指定されている場合はそれをカレンダーとして使用し、指定されていない場合はグレゴリオ暦を使用します。以下の形式説明に記載されている値の範囲は後者(グレゴリオ暦)に基づくものであり、他のカレンダーでは異なる場合があります。

この形式には、以下の式を使用できます:

式出力
d先頭のゼロを省いた数字としての日(1~31)
dd先頭にゼロを付けた日付(01~31)
ddd曜日の略称(「Mon」から「Sun」まで)。
dddd曜日の正式名称(「Monday」から「Sunday」まで)。
M先頭のゼロを省略した数字による月(1~12)
MM先頭にゼロを付けた数字による月(01~12)
MMM月の略称(「Jan」~「Dec」)。
MMMM月の正式名称(「January」~「December」)。
yy2桁の年(00~99)
yyyy年を数値で指定します。必要に応じて先頭に0を埋めて、少なくとも4桁になるようにします。負の年を表すために先頭にマイナス記号を付けることが可能です。4桁を超える数値を指定する場合は、プラス記号が必要です。

注:日および月の 名称は英語で指定する必要があります(Cロケール)。ローカライズされた月および日の名称を認識させるには、QLocale::system() を使用してください。

一重引用符で囲まれた、空でない任意の文字列も(引用符を除いて)テキストとして扱われ、式としては解釈されません。 連続する2つの単一引用符("''")は、リテラルシーケンスの開始や終了ではなく、入力と照合される単一引用符として読み取られます。その他のすべての入力文字は、入力文字列内で照合されるリテラルテキストとして扱われます。例:

QDate date = QDate::fromString("1MM12car2003", "d'MM'MMcaryyyy");
// date is 1 December 2003

フォーマットが満たされない場合、無効なQDate が返されます。

数値フィールドが隣接しており、数字の列を区切る区切り文字がない場合、1桁での指定が許可されている一部のフィールドにおいて、値が9を超えるために2桁を使用しているかどうかについて曖昧さが生じる可能性があります。 そのようなフィールドに2桁を割り当てると他のフィールドに割り当てる桁数が不足し、かつ1桁での読み取りが他のフィールドと整合する場合、この曖昧さは解消できます。 それ以外の場合(1桁のみが許容されるフィールドが複数あり、各フィールドに1桁ずつ割り当てた場合に余剰の桁が生じる場合)、データの一貫性が保たれる限り、後続のフィールドに余剰の桁を割り当てる解決策よりも、先行するフィールドに余剰の桁を割り当てる解決策が優先されます。例えば:

QDate date = QDate::fromString("130", "Md"); // Janary 30

この形式で表現されていないフィールドについては、以下のデフォルト値が使用されます:

フィールドデフォルト値
年baseYear (または 1900)
月1(1月)
日1

format で年の下2桁のみが指定されている場合、baseYear から始まる100年間が最初に検討される候補となります。 バージョン6.7以前はbaseYear パラメータが存在せず、常に1900が使用されていました。これはbaseYear のデフォルト設定であり、その年から1999年までの年が選択されます。例えば、baseYear として1976を指定すると、1976年から2075年までの年が選択されます。 形式に月、日、曜日も含まれている場合、これらだけで世紀が暗黙的に特定されます。そのような場合、baseYear で指定された世紀に最も近い世紀の中から、より新しい方を優先して、一致する日付が選択されます。詳細については、QCalendar::matchCenturyToWeekday() およびDate ambiguities を参照してください。

以下の例は、デフォルト値を示しています:

QDate::fromString("1.30", "M.d");           // January 30 1900
QDate::fromString("20000110", "yyyyMMdd");  // January 10, 2000
QDate::fromString("20000110", "yyyyMd");    // January 10, 2000

注: フォーマット文字が、それを用いた上記の表の中で最も長い式よりも多くの回数繰り返される場合 、そのフォーマット部分は、区切り文字なしで複数の式として読み取られます。具体的には、上記の最も長い式が、そのコピー数だけ繰り返され、最後に短い式となる可能性のある残りの部分で終わる形となります。 したがって、'MMMMMMMMMM' は"MayMay05" に一致し、月を5月に設定します。同様に、'MMMMMM' は"May08" に一致し、不整合であると判断されるため、無効な日付となります。

日付の曖昧さ

文化によって日付の表記形式が異なるため、ユーザーは日付フィールドの記述順序を混同してしまう可能性があります。例えば、"Wed 28-Nov-01" は、2028年11月1日、あるいは2001年11月28日のどちらを意味する可能性があります(いずれも水曜日です)。"ddd yy-MMM-dd" という形式を使用すると前者の意味に、"ddd dd-MMM-yy" を使用すると後者の意味に解釈されます。しかし、ユーザーが意図した意味は、コードが期待する形式ではなく、ユーザーが普段日付を記述する方法によって異なる場合があります。

上記の例では、月の日と2桁の年が混同されていました。月と日の両方が数値で指定されている場合、これらを混同することによる同様の混乱が生じる可能性があります。 このような場合、日付形式に曜日のフィールドを含めることで冗長性が生まれ、この種のエラーの検出に役立つ可能性があります。しかし、上記の例にあるように、これが常に有効であるとは限りません。2つのフィールド(またはその意味)が入れ替わっても、同じ曜日となる日付が生成される可能性があるからです。

形式に曜日を含めることは、年の下2桁のみを使用して指定された日付の世紀を特定するのにも役立ちます。 残念ながら、ユーザー(またはその他のデータソース)が2つのフィールドを混同した日付と組み合わさると、この解決策によって、フォーマットの読み取りには一致するが、作成者が意図したものではない日付が見つかってしまう可能性があります。 同様に、それ以外の部分は正しい日付であっても、ユーザーが単に曜日を間違えただけで、別の世紀の日付が導き出される可能性があります。いずれの場合も、別の世紀の日付が特定されると、誤って入力された日付が、まったく異なる日付になってしまう恐れがあります。

日付の曖昧さを回避する最善の方法は、4桁の年と、名称(完全形または略称)で指定された月を使用することです。理想的には、ユーザーが日付のどの部分を選択しているかを十分に明確に示すユーザーインターフェースの慣用表現を通じて収集するのが望ましいです。曜日を含めることも、データの一貫性を確認する手段を提供する点で役立ちます。 データがユーザーから提供され、ユーザーが選択したロケールに基づいた形式が使用される場合、短い形式では2桁の年が使用される可能性が高いため、長い形式を使用するのが最善です。もちろん、形式を常に制御できるとは限りません。例えば、データが自身の管理下にないソースから提供される場合などです。

こうした混乱の原因となり得る要素、特に曖昧さのない形式が使用されているか確信が持てない場合には、文字列を日付として解釈した結果が単に有効であるだけでなく、そのデータが提供された目的にとって妥当なものかどうかを確認することが重要です。 結果が妥当な値の範囲外にある場合は、ユーザーに日付の選択を確認してもらう価値があるかもしれません。その際、文字列から読み取った日付を、月名と4桁の年を含む長い形式で表示することで、ユーザーが誤りを認識しやすくなります。

toString()、QDateTime::fromString()、QTime::fromString()、およびQLocale::toDate()も参照してください 。

[static, since 6.0] QDate QDate::fromString(QStringView string, Qt::DateFormat format = Qt::TextDate)

この関数は、QDate::fromString() をオーバーロードしています。

この関数は Qt 6.0 で導入されました。

[static] QDate QDate::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)

string で表される「QDate 」を、指定された「format 」を使用して返します。文字列を解析できない場合は、無効な日付を返します。

Qt::TextDate に関する注意:英語の月名のみ(例:短縮形の「Jan」や完全形の「January」)が認識されます。

これはオーバーロードされた関数です。

toString() およびQLocale::toDate()も参照してください 。

[static, since 6.0] QDate QDate::fromString(QStringView string, QStringView format, QCalendar cal)

この関数は、QDate::fromString() をオーバーロードしています。

この関数は Qt 6.0 で導入されました。

[static, since 6.7] QDate QDate::fromString(QStringView string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)

デフォルトコンストラクタで生成されたQCalendar を使用します。

この関数は、QDate::fromString() をオーバーロードしています。

この関数は Qt 6.7 で導入されました。

[static, since 6.0] QDate QDate::fromString(const QString &string, QStringView format, QCalendar cal)

この関数は、QDate::fromString() をオーバーロードしています。

この関数はQt 6.0で導入されました。

[static, since 6.7] QDate QDate::fromString(const QString &string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)

デフォルトコンストラクタで生成されたQCalendar を使用します。

この関数は、QDate::fromString() をオーバーロードしています。

この関数は Qt 6.7 で導入されました。

[static] QDate QDate::fromString(const QString &string, const QString &format, QCalendar cal)

この関数は、QDate::fromString() をオーバーロードしています。

[static, since 6.7] QDate QDate::fromString(const QString &string, const QString &format, int baseYear = QLocale::DefaultTwoDigitBaseYear)

デフォルトコンストラクタで生成された `QCalendar` を使用します。

この関数は、QDate::fromString() をオーバーロードしています。

この関数は Qt 6.7 で導入されました。

[static, since 6.7] QDate QDate::fromString(QStringView string, QStringView format, int baseYear, QCalendar cal)

この関数は、QDate::fromString() をオーバーロードしています。

この関数は Qt 6.7 で導入されました。

[static, since 6.0] QDate QDate::fromString(const QString &string, QStringView format, int baseYear, QCalendar cal)

この関数は、QDate::fromString() をオーバーロードしています。

この関数は Qt 6.0 で導入されました。

void QDate::getDate(int *year, int *month, int *day) const

日付の年、月、日を抽出し、それぞれ *year 、*month 、*day に代入します。これらのポインタは NULL である場合があります。

日付が無効な場合は 0 を返します。

注: Qt 5.7 以前のバージョンでは 、この関数はconst としてマークされています。

関連項目: year()、month()、day()、isValid()、およびQCalendar::partsFromDate()。

[static] bool QDate::isLeapYear(int year)

指定されたyear がグレゴリオ暦の閏年である場合はtrue を返し、そうでない場合はfalse を返します。

QCalendar::isLeapYear()も参照してください 。

[constexpr] bool QDate::isNull() const

日付がnullの場合はtrue を返し、それ以外の場合はfalse を返します。nullの日付は無効です。

注:この関数の動作は 、isValid() と同等です。

関連項目 :isValid()

[constexpr] bool QDate::isValid() const

この日付が有効な場合は `true ` を返し、そうでない場合は `false` を返します。

isNull() およびQCalendar::isDateValid()も参照してください 。

[static] bool QDate::isValid(int year, int month, int day)

指定された日付(year 、month 、およびday )がグレゴリオ暦で有効な場合、true を返します。そうでない場合は、false を返します。

例:

QDate::isValid(2002, 5, 17);  // true
QDate::isValid(2002, 2, 30);  // false (Feb 30 does not exist)
QDate::isValid(2004, 2, 29);  // true (2004 is a leap year)
QDate::isValid(2000, 2, 29);  // true (2000 is a leap year)
QDate::isValid(2006, 2, 29);  // false (2006 is not a leap year)
QDate::isValid(2100, 2, 29);  // false (2100 is not a leap year)
QDate::isValid(1202, 6, 6);   // true (even though 1202 is pre-Gregorian)

この関数は、QDate::isValid() をオーバーロードしています。

関連項目: isNull()、setDate()、およびQCalendar::isDateValid()。

int QDate::month(QCalendar cal) const

指定された日付の月番号を返します。

1月を1として、1年から順に月を番号付けします。cal が指定された場合はそれをカレンダーとして使用し、指定がない場合はグレゴリオ暦を使用します。グレゴリオ暦における月の番号付けは以下の通りです:

  • 1 = "1月"
  • 2 = "2月"
  • 3 = "3月"
  • 4 = "4月"
  • 5 = "5月"
  • 6 = "6月"
  • 7 = "7月"
  • 8 = 「8月」
  • 9 = "9月"
  • 10 = "10月"
  • 11 = "11月"
  • 12 = "12月"

日付が無効な場合は 0 を返します。一部の暦では、年によっては12ヶ月以上ある場合があることに注意してください。

year()、day()、およびQCalendar::partsFromDate()も参照してください 。

int QDate::month() const

この関数は、QDate::month() をオーバーロードしています。

bool QDate::setDate(int year, int month, int day)

指定されたyear 、month 、day の数値に対応するグレゴリオ暦の日付を表すように設定します。結果として得られる日付が有効な場合はtrueを返し、そうでない場合は無効な日付を表すように設定してfalseを返します。

isValid() およびQCalendar::dateFromParts()も参照してください 。

bool QDate::setDate(int year, int month, int day, QCalendar cal)

指定されたカレンダーcal において、指定されたyear 、month およびday の数値を用いて日付を表すように設定します。結果として得られる日付が有効な場合は true を返し、そうでない場合は無効な日付を表すように設定して false を返します。

isValid() およびQCalendar::dateFromParts()も参照してください 。

QDateTime QDate::startOfDay(const QTimeZone &zone) const

その日の開始時刻を返します。

1日の開始時刻は、時間の記述方法によって異なります。西側のタイムゾーンでは1日の開始・終了時刻が早くなり、東側のタイムゾーンでは遅くなります。使用する時間表現は、オプションの時間zone で指定できます。デフォルトの時間表現は、システムのローカル時間です。

通常、1日の始まりは深夜0時(00:00)ですが、タイムゾーンの移行によって指定された日付がその深夜を飛び越える場合(例:夏時間の「スプリングフォワード」により、1日の最初の1時間がスキップされる場合など)、その日の実際の最も早い時刻が返されます。 これは、時刻の表現がタイムゾーンまたはローカルタイムである場合にのみ発生します。

zone の timeSpec() がQt::OffsetFromUTC またはQt::UTC の場合、時刻の表現には遷移がないため、1日の開始時刻はQTime(0, 0) となります。

ごく稀に、日付が完全にスキップされるケース(これは、国際日付変更線の東側にあったタイムゾーンが、その西側に移行する場合に発生する)では、返される値は無効となる。zone として無効なタイムゾーンを渡した場合も、QDateTime で表現可能な範囲の外から始まる日付と同様に、無効な結果が生成される。

endOfDay()も参照してください 。

[since 6.5] QDateTime QDate::startOfDay() const

この関数は、QDate::startOfDay() をオーバーロードしています。

この関数は Qt 6.5 で導入されました。

[constexpr] qint64 QDate::toJulianDay() const

日付をユリウス日数に変換します。

fromJulianDay()も参照してください 。

[constexpr noexcept] std::chrono::sys_days QDate::toStdSysDays() const

1970年1月1日(UNIXエポック)とこの日付との間の日数を、std::chrono::sys_days オブジェクトとして返します。この日付がエポックより前の場合、日数は負の値になります。

注:この 関数を使用するには、C++20が必要です。

関連項目: fromStdSysDays() およびdaysTo()。

QString QDate::toString(const QString &format, QCalendar cal) const

QString QDate::toString(QStringView format, QCalendar cal) const

日付を文字列として返します。format パラメータは、結果の文字列の形式を決定します。cal が指定された場合、日付の表現に使用する暦が決定されます。デフォルトはグレゴリオ暦です。Qt 5.14以前では、cal パラメータは存在せず、常にグレゴリオ暦が使用されていました。

format パラメータでは、以下の式を使用できます:

式出力
d先頭のゼロを省いた日数(1~31)
dd先頭にゼロを付けた数字として表された日(01~31)
ddd曜日の略称(「Mon」~「Sun」)。
dddd曜日の正式名称(「Monday」から「Sunday」まで)。
M先頭のゼロを省略した数字による月(1~12)
MM先頭にゼロを付けた数字による月(01~12)
MMM月の略称(「Jan」~「Dec」)。
MMMM月の正式名称(「January」から「December」まで)。
yy2桁の年(00~99)
yyyy年を数字で表したもの。必要に応じて、少なくとも4桁になるよう先頭に0を補います。年が負の値の場合は、先頭にマイナス記号が付加されます。正の年が4桁を超える場合は、先頭にプラス記号が付加されます。

一重引用符で囲まれた、空でない任意の文字列は、たとえ書式指定文字が含まれていたとしても、出力文字列にそのまま(引用符を除いて)含まれます。 連続する2つの単一引用符("''")は、出力においてリテラルシーケンスの開始や終了を表すのではなく、単一引用符1つに置換されます。フォーマット文字列内のその他のすべての文字は、出力文字列にそのまま含まれます。

区切り文字のない形式(例: "ddMM")もサポートされていますが、結果の文字列が必ずしも確実に読み取れるとは限らないため、注意して使用する必要があります(例: "dM" が "212" を生成する場合、12月2日か2月21日のどちらかを意味する可能性があります)。

フォーマット文字列の例(QDate が1969年7月20日であると仮定):

フォーマット結果
dd.MM.yyyy20.07.1969
ddd MMMM d yy1969年7月20日(日)
「その日は」 ddddその日は日曜日

日時が無効な場合、空の文字列が返されます。

注:曜日 および月の名前は英語(C ロケール)で指定されます。ローカライズされた月および曜日の名前を取得するには、QLocale::system() を使用してください。toString()。

注: フォーマット文字が、それを使用する上記の表の中で最も長い式よりも多く繰り返される場合 、フォーマットのその部分は、区切り文字なしで複数の式として読み取られます。つまり、上記の最も長い式が、そのコピー数だけ繰り返され、最後に短い式となる残りの部分が追加されます。 したがって、5月の日付に対して `'MMMMMMMMMM' ` を指定すると、出力には `"MayMay05" ` が含まれます。

fromString()、QDateTime::toString()、QTime::toString()、およびQLocale::toString()も参照してください 。

QString QDate::toString(QStringView format) const

この関数は、QDate::toString() をオーバーロードしています。

QString QDate::toString(Qt::DateFormat format = Qt::TextDate) const

日付を文字列として返します。format パラメータは、文字列の書式を指定します。

format がQt::TextDate の場合、文字列はデフォルトの形式でフォーマットされます。曜日名と月名は英語表記になります。このフォーマットの例としては、「Sat May 20 1995」などがあります。ローカライズされたフォーマットについては、QLocale::toString()を参照してください。

format がQt::ISODate の場合、文字列の形式は日付と時刻の表現に関するISO 8601拡張仕様に準拠し、yyyy-MM-ddという形式をとります。ここで、yyyyは年、MMはその年の月(01から12の間)、 ddは01から31までの日付を表します。

format がQt::RFC2822Date の場合、文字列はRFC 2822に準拠した形式でフォーマットされます。このフォーマットの例としては「20 May 1995」があります。

日付が無効な場合、空の文字列が返されます。

警告: Qt::ISODate の形式は 、0 から 9999 までの年の範囲でのみ有効です。

この関数は、QDate::toString() をオーバーロードしています。

fromString() およびQLocale::toString()も参照してください 。

QString QDate::toString(const QString &format) const

この関数は、QDate::toString() をオーバーロードしています。

int QDate::weekNumber(int *yearNumber = nullptr) const

ISO 8601 に基づく週番号(1 から 53)を返します。

日付が無効な場合は0を返します。それ以外の場合は、その日付に対応する週番号を返します。yearNumber がnullptr (デフォルト値)でない場合、年は*yearNumber として格納されます。

ISO 8601 に従い、各週は、その大部分の日が属するグレゴリオ暦の年に割り当てられます。ISO 8601 では週は月曜日から始まるため、これはその週の木曜日が属する年となります。ほとんどの年は 52 週ですが、53 週ある年もあります。

注:* yearNumber は、必ずしもyear() と同じとは限りません。たとえば、2000年1月1日は1999年の第52週に、2002年12月31日は2003年の第1週に属します。

「isValid()」も参照してください 。

int QDate::year(QCalendar cal) const

この日付の年を返します。

指定された場合、cal をカレンダーとして使用します。指定がない場合は、グレゴリオ暦を使用します。

日付が無効な場合は 0 を返します。一部の暦では、その暦の最初の年より前の日付はすべて無効となる場合があります。

西暦0年を持つ暦を使用している場合、isValid() を使用して、返り値が0かどうかを確認してください。このような暦では、西暦1年の前に西暦0年が、その前に西暦-1年が、というように、当然のことながら負の年数が使用されます。

一部の暦では、西暦0年が存在しないにもかかわらず、最初の年より前の年について、1から逆方向に数える慣習的な番号付けがされています。例えば、プロレプティック・グレゴリオ暦では、西暦1年(最初の年)より前の年が、順次、紀元前1年、紀元前2年、紀元前3年…と識別されます。 このような暦では、西暦1年以前の年を示すために負の年号が用いられ、-1は西暦1年の前を示す。

関連項目: month()、day()、QCalendar::hasYearZero()、QCalendar::isProleptic()、およびQCalendar::partsFromDate()を参照してください 。

int QDate::year() const

この関数は、QDate::year() をオーバーロードしています。

関連する非メンバー

[constexpr noexcept] bool operator!=(const QDate &lhs, const QDate &rhs)

lhs とrhs が異なる日を表す場合はtrue を返し、そうでない場合はfalse を返します。

operator==()も参照してください 。

[since 6.11] QDate &operator++(QDate &date)

++ 演算子は、date に1日を追加し、変更後の日付オブジェクトへの参照を返します。

この関数は Qt 6.11 で導入されました。

addDays() およびoperator--()も参照してください 。

[since 6.11] QDate operator++(QDate &date, int)

後置演算子 `++ ` は、`date ` に 1 日を加え、前の日付を持つ `date ` のコピーを返します。

この関数は Qt 6.11 で導入されました。

addDays() およびoperator--()も参照してください 。

[since 6.11] QDate &operator--(QDate &date)

-- 演算子は、date から1日を差し引き、変更後の日付オブジェクトへの参照を返します。

この関数は Qt 6.11 で導入されました。

addDays() およびoperator++()も参照してください 。

[since 6.11] QDate operator--(QDate &date, int)

後置演算子 `-- ` は、date から 1 日を引いて、次の日付を持つ `date ` のコピーを返します。

この関数は Qt 6.11 で導入されました。

addDays() およびoperator++()も参照してください 。

[constexpr noexcept] bool operator<(const QDate &lhs, const QDate &rhs)

lhs がrhs より前の場合、true を返します。それ以外の場合は、false を返します。

QDataStream &operator<<(QDataStream &out, QDate date)

date をout ストリームに書き込みます。

「Qt データ型のシリアライズ」も参照してください 。

[constexpr noexcept] bool operator<=(const QDate &lhs, const QDate &rhs)

lhs がrhs 以下である場合は `true ` を返し、それ以外の場合は `false` を返します。

[constexpr noexcept] bool operator==(const QDate &lhs, const QDate &rhs)

lhs とrhs が同じ日を指す場合は `true ` を返し、そうでない場合は `false` を返します。

[constexpr noexcept] bool operator>(const QDate &lhs, const QDate &rhs)

lhs がrhs より新しい場合はtrue を返し、そうでない場合はfalse を返します。

[constexpr noexcept] bool operator>=(const QDate &lhs, const QDate &rhs)

lhs がrhs 以上である場合はtrue を返し、それ以外の場合はfalse を返します。

QDataStream &operator>>(QDataStream &in, QDate &date)

ストリーム `in ` から日付を読み取り、`date` に格納します。

「Qt データ型のシリアライズ」も参照してください 。

© 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.