QDate Class

QDate クラスは日付関数を提供する。詳細...

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

このクラスは強く比較可能です。

このクラスは、std::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
(until 6.9) QDateTime endOfDay(Qt::TimeSpec spec, int offsetSeconds = 0) 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
(until 6.9) QDateTime startOfDay(Qt::TimeSpec spec, int offsetSeconds = 0) const
qint64 toJulianDay() const
std::chrono::sys_days toStdSysDays() const
QString toString(QStringView format, QCalendar cal) 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
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, Qt::DateFormat format = Qt::TextDate)
QDate fromString(const QString &string, const QString &format, int baseYear, QCalendar cal)
(since 6.0) QDate fromString(QStringView 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)
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 オブジェクトとして提供される任意の暦に関して、その日を表す年、月、日を報告することができます。qint64QDateオブジェクトは、constへの参照ではなく値で渡されなければなりません。

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日前 "である。CE1月1日の前日、QDate(1, 1, 1)は、BCE12月1日31日、QDate(-1, 12, 31)である。QCalendar::hasYearZero() を参照。

有効な日付の範囲

グレゴリオ暦では前4714年11月24日がユリウス日0日(ユリウス暦では前4713年1月1日)となります。絶対的な日付を保存する効率的で正確な方法であるだけでなく、ヘブライ語、イスラム教、中国語など他の暦法に日付を変換するのにも適している。ユリウス日数は、QDate::toJulianDay() で取得でき、QDate::fromJulianDay() で設定できる。

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

QTime,QDateTime,QCalendar,QDateTime::YearRange,QDateEdit,QDateTimeEdit, およびQCalendarWidgetも参照のこと

メンバ関数 ドキュメント

[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 の datetime クラス間の相互運用が容易になります。

例えば

// 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 = 23 / 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 と関連するクラスは年号をゼロにします。つまり、date がゼロ年以前である場合、QDate オブジェクトは、date で指定された年よりも1つ小さい年を持つことになります。

注: この関数は C++20 を必要とします。

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

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

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

日付を文字列として返します。format パラメータは、結果の文字列の形式を決定します。cal を指定すると、日付を表すのに使用される暦が決定されます。Qt 5.14以前では、cal パラメータはなく、常にグレゴリオ暦が使用されていました。

これらの式はformat パラメータで使用できます:

出力
d先頭のゼロを除いた数字としての日(1~31)
ddゼロを先頭に持つ数値としての曜日(01~31)
ddd曜日名の省略形('Mon'~'Sun')。
dddd長い曜日名('Monday'から'Sunday')。
M先頭の0を除いた月(1~12)
MMゼロを先頭に持つ数字としての月(01~12)
MMM省略形の月名('Jan'から'Dec')。
MMMM長い月名('January'から'December')。
yy2桁の数字による年(00~99)
yyyy4桁の年号。西暦が負の場合、マイナス記号が付加され、5文字になる。

一重引用符で囲まれた文字列は、書式設定文字を含んでいても、(引用符を 取り除いた)出力文字列にそのまま含まれる。連続する2つの一重引用符("'')は、出力では一重引用符に置き換えられる。書式文字列内のその他の文字は、出力文字列にそのまま含まれます。

セパレータのない書式 (たとえば "ddMM") もサポートされていますが、結果の文字列が必ずしも確実に読めるとは限らないので、注意して使用する必要があります (たとえば "dM" が "212" を生成する場合、12月2日を意味することもあれば、2月21日を意味することもあります)。

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

書式結果
dd.MM.yyyy20.07.1969
ddd MMMM d yy69年7月20日(日
その日は』 dddd日は日曜日です。

datetimeが無効な場合は、空の文字列が返される。

注意: 曜日と月の名前は英語(Cロケール)で指定されます。ローカライズされた月と日の名前を取得するには、QLocale::system().toString() を使用する。

注意: 書式文字が、その文字を使った上の表の最長の表現よりも何度も繰り返される場合、書式のこの部分は、それらの間に区切り文字のない複数の表現として読み取られます。したがって、5月の日付の'MMMMMMMMMM' は、"MayMay05" を出力に寄与する。

fromString()、QDateTime::toString()、QTime::toString() およびQLocale::toString()も参照

[constexpr] QDate::QDate()

ヌル日付を構築します。NULL 日付は無効です。

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

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 QDate::addYears(int nyears, QCalendar cal) const

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

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

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

addDays() およびaddMonths()も参照

QDate QDate::addYears(int nyears) const

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

[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

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

int QDate::dayOfWeek(QCalendar cal) const

この日付の曜日(1 = Monday から 7 = Sunday)を返します。

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

day()、dayOfYear()、QCalendar::dayOfWeek() およびQt::DayOfWeekも参照

int QDate::dayOfWeek() const

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

int QDate::dayOfYear(QCalendar cal) const

この日付の年(初日は 1)を返します。

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

day()、dayOfWeek() およびQCalendar::daysInYear()も参照

int QDate::dayOfYear() const

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

int QDate::daysInMonth(QCalendar cal) const

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

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

day()、daysInYear()、QCalendar::daysInMonth()、QCalendar::maximumDaysInMonth() およびQCalendar::minimumDaysInMonth()も参照

int QDate::daysInMonth() const

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

int QDate::daysInYear(QCalendar cal) const

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

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

day()、daysInMonth()、QCalendar::daysInYear() およびQCalendar::maximumMonthsInYear()も参照

int QDate::daysInYear() const

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

qint64 QDate::daysTo(QDate d) const

この日付からd までの日数を返します(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

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

西よりのタイムゾーンでは一日の始まりと終わりが早くなり、 東よりのタイムゾーンでは一日の始まりと終わりが遅くなります。使用する時間表現は、オプションのtimezone 。デフォルトの時間表現はシステムのローカルタイムです。

通常、1日の終わりは真夜中の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

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

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

[until 6.9] QDateTime QDate::endOfDay(Qt::TimeSpec spec, int offsetSeconds = 0) const

この関数はバージョン6.9で廃止予定です。

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

使用方法endOfDay(const QTimeZone &) instead. Returns the end-moment of the day. When a day ends depends on a how time is described: each day starts and ends earlier for those with higher offsets from UTC and later for those with lower offsets from UTC. The time representation to use can be specified either by a \a spec and \a offsetSeconds (ignored unless \a spec is Qt::OffsetSeconds) or by a time zone. Usually, the end of the day is one millisecond before the midnight, 24:00: however, if a local time transition causes the given date to skip over that moment (e.g. a DST spring-forward skipping over 23:00 and the following hour), the actual latest time in the day is returned. When \a spec is Qt::OffsetFromUTC, \a offsetSeconds gives the implied zone's offset from UTC. As UTC and such zones have no transitions, the end of the day is QTime(23, 59, 59, 999) in these cases. In the rare case of a date that was entirely skipped (this happens when a zone east of the international date-line switches to being west of it), the return shall be invalid. Passing Qt::TimeZone as \a spec (instead of passing a QTimeZone) will also produce an invalid result, as shall dates that end outside the range representable by QDateTime.

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

ユリウス日jdQDate に変換します。

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, Qt::DateFormat format = Qt::TextDate)

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

Qt::TextDate の注意 : 英語の月名 (短縮形の "Jan" や長い形式の "January" など) だけが認識されます。

toString() およびQLocale::toDate()も参照

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

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

指定された場合はcal を、それ以外の場合はグレゴリオ暦を使用します。以下の書式の説明における値の範囲は、後者のものである。

他の暦では異なるかもしれません:

出力
d先頭のゼロを除いた数値としての曜日(1〜31)
ddゼロを先頭に持つ数値としての曜日(01~31)
ddd曜日名の省略形('Mon'~'Sun')。
dddd長い曜日名('Monday'から'Sunday')。
M先頭の0を除いた月(1~12)
MMゼロを先頭に持つ数字としての月(01~12)
MMM省略形の月名('Jan'から'Dec')。
MMMM長い月名('January'から'December')。
yy2桁の数字による年(00~99)
yyyy4桁の数字(負の年の場合は先頭にマイナス記号をつけることもできる)。

注意: 曜日と月名は英語(Cロケール)で指定しなければならない。ローカライズされた月日名を認識したい場合は、QLocale::system().toDate()を使用する。

その他の入力文字はすべてテキストとして扱われる。一重引用符で囲まれた空でない文字列も、(引用符を取り除いた)テキストとして扱われ、式としては解釈されません。例えば

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

フォーマットを満たさない場合、無効なQDate 。先頭のゼロを期待しない式(d、M)は貪欲になる。これは、たとえ許容される値の範囲外になり、他のセクションのために桁数が少なすぎるとしても、2桁を使用することを意味する。例えば、以下の書式文字列は1月30日を意味する可能性があるが、Mが2桁をつかむため、無効な日付になる:

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

フォーマットで表現されないフィールドについては、以下のデフォルトが使用される:

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

format 、年の下2桁のみを指定した場合、baseYear から始まる100年が最初に検討される候補となる。6.7以前にはbaseYear パラメータはなく、常に1900が使用されていた。これはbaseYear のデフォルトであり、その時点から1999年までを選択する。1976年をbaseYear に渡すと、例えば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桁だけで指定された日付の世紀を解決することもできる。残念なことに、ユーザー(または他のデータソース)が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)

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

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

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

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

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

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

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

デフォルトのQCalendar を使用します。

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

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

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

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

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

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

デフォルト構成のQCalendar を使用します。

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

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

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

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

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

デフォルトで構成されているQCalendar を使用します。

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

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

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

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

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

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

この関数は 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)

isNull()、setDate()、QCalendar::isDateValid()も参照

int QDate::month(QCalendar cal) const

月番号:日付の月番号を返します。

最初の月が 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

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

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

グレゴリオ暦で、与えられたyearmonth およびday の数値で日付を表すように設定します。結果の日付が有効な場合は true を返し、無効な場合は false を返します。

isValid() およびQCalendar::dateFromParts()も参照

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

指定した暦cal で、指定したyearmonth およびday の数値で日付を表すようにこれを設定します。結果の日付が有効な場合は true を返し、無効な場合は false を返します。

isValid() およびQCalendar::dateFromParts()も参照

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

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

一日がいつ始まるかは、時刻の表現に依存します。西よりのタイムゾーンでは一日の始まりと終わりが早くなり、 東よりのタイムゾーンでは一日の始まりと終わりが遅くなります。使用する時間表現は、オプションのtimezone 。デフォルトの時刻表示はシステムのローカルタイムです。

通常、1日の始まりは真夜中の00:00です。しかし、タイムゾーンの遷移によって指定した日付が真夜中の00:00を飛び越してしまった場合(例えば、夏時間の春分の日の最初の1時間を飛び越してしまった場合など)、その日の実際の最も早い時刻が返されます。これは、時間表現がタイムゾーンまたはローカル時間の場合にのみ発生します。

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

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

endOfDay()も参照のこと

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

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

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

[until 6.9] QDateTime QDate::startOfDay(Qt::TimeSpec spec, int offsetSeconds = 0) const

この関数はバージョン6.9で廃止予定です。

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

代わりにstartOfDay(const QTimeZone &) を使用してください。

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

UTCからのオフセットが大きいほど早く始まり、小さいほど遅く終わります。使用する時間表現は、specoffsetSecondsspec が Qt::OffsetSeconds でない限り無視されます)、またはタイムゾーンで指定できます。

通常、1日の始まりは午前0時00分です。しかし、ローカル時間の遷移によって、指定された日付がその午前0時をスキップする場合(例えば、サマータイムの春分の日の最初の1時間をスキップする場合)、その日の実際の最も早い時刻が返されます。

specQt::OffsetFromUTC の場合、offsetSeconds はUTCからの暗黙のゾーンオフセットを与える。UTCとそのようなゾーンには遷移がないため、このような場合、日の始まりはQTime(0, 0)となる。

稀に、日付が完全にスキップされた場合(これは、国際日付変更線の東側のゾーンが、 国際日付変更線の西側に切り替わったときに発生する)、返り値は無効となる。QTimeZone を渡す代わりにspec としてQt::TimeZone を渡しても、QDateTime で表現できる範囲外の日付から始まる場合と同様に、無効な結果が返される。

[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(QStringView format) const

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

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

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

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

formatQt::TextDate の場合、文字列はデフォルトの方法でフォーマットされます。曜日と月の名前は英語になります。この書式の例は "Sat May 20 1995 "です。ローカライズされた書式については、QLocale::toString()を参照のこと。

formatQt::ISODate の場合、文字列の書式は日付と時刻の表現に関する ISO 8601 拡張仕様に対応し、yyyy-MM-dd の形式をとる。ここで yyyy は年、MM はその年の月(01 から 12 の間)、dd はその月の日(01 から 31 の間)である。

formatQt::RFC2822Date の場合、文字列はRFC2822互換の書式になる。この書式の例は "20 May 1995 "である。

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

警告 Qt::ISODate の書式は、0から9999の範囲の年に対してのみ有効です。

fromString() およびQLocale::toString()も参照

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

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

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

ISO 8601 の週番号 (1 から 53) を返します。

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

ISO 8601 に従えば、各週はグレゴリオ暦でその日のほとんどが属する年に当たる。ISO 8601の週の始まりは月曜日なので、その週の木曜日が属する年になります。ほとんどの年は52週ですが、53週の年もあります。

注: *yearNumberyear() と同じとは限りません。例えば、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年といった具合に使用される。

例えば、グレゴリオ暦では、紀元前1年(最初の年)より前の年は、紀元前1年、紀元前2年、紀元前3年......と続く。このような暦では、1年より前の年を示すために負の年号が使用され、-1が1より前の年を示す。

month(),day(),QCalendar::hasYearZero(),QCalendar::isProleptic(),QCalendar::partsFromDate()も参照のこと

int QDate::year() const

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

関連する非会員

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

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

operator==()も参照

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

lhsrhs よりも早い場合はtrue を返し、そうでない場合はfalse を返す。

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

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

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

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

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

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

lhsrhs が同じ日を表している場合はtrue を返し、そうでない場合はfalse を返します。

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

lhsrhs より後の場合はtrue を返し、それ以外の場合はfalse を返す。

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

lhsrhs より後の場合はtrue を返し、それ以外の場合はfalse を返す。

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

ストリームin から日付をdate に読み込みます。

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

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