このページでは

QDateTime Class

QDateTime クラスは、日付および時刻に関する関数を提供します。詳細...

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

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

QDateTime の比較

カテゴリ比較可能な型
weakQDateTime の比較カテゴリ比較可能な型weak

パブリック型

(since 6.7) enum class TransitionResolution { Reject, RelativeToBefore, RelativeToAfter, PreferBefore, PreferAfter, …, PreferDaylightSaving }
enum class YearRange { First, Last }

パブリック関数

QDateTime(QDate date, QTime time, const QTimeZone &timeZone, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
QDateTime()
(since 6.5) QDateTime(QDate date, QTime time, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
QDateTime(const QDateTime &other)
QDateTime(QDateTime &&other)
~QDateTime()
QDateTime addDays(qint64 ndays) const
(since 6.4) QDateTime addDuration(std::chrono::milliseconds msecs) const
QDateTime addMSecs(qint64 msecs) const
QDateTime addMonths(int nmonths) const
QDateTime addSecs(qint64 s) const
QDateTime addYears(int nyears) const
QDate date() const
qint64 daysTo(const QDateTime &other) const
bool isDaylightTime() const
bool isNull() const
bool isValid() const
qint64 msecsTo(const QDateTime &other) const
int offsetFromUtc() const
qint64 secsTo(const QDateTime &other) const
void setDate(QDate date, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
void setMSecsSinceEpoch(qint64 msecs)
void setSecsSinceEpoch(qint64 secs)
void setTime(QTime time, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
void setTimeZone(const QTimeZone &toZone, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)
void swap(QDateTime &other)
QTime time() const
(since 6.5) QTimeZone timeRepresentation() const
Qt::TimeSpec timeSpec() const
QTimeZone timeZone() const
QString timeZoneAbbreviation() const
CFDateRef toCFDate() const
QDateTime toLocalTime() const
qint64 toMSecsSinceEpoch() const
NSDate *toNSDate() const
QDateTime toOffsetFromUtc(int offsetSeconds) const
qint64 toSecsSinceEpoch() const
(since 6.4) std::chrono::sys_time<std::chrono::milliseconds> toStdSysMilliseconds() const
(since 6.4) std::chrono::sys_seconds toStdSysSeconds() 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
QDateTime toTimeZone(const QTimeZone &timeZone) const
QDateTime toUTC() const
(since 6.4) QDateTime &operator+=(std::chrono::milliseconds duration)
(since 6.4) QDateTime &operator-=(std::chrono::milliseconds duration)
QDateTime &operator=(const QDateTime &other)

静的パブリックメンバー

(since 6.5) QDateTime currentDateTime(const QTimeZone &zone)
QDateTime currentDateTime()
QDateTime currentDateTimeUtc()
qint64 currentMSecsSinceEpoch()
qint64 currentSecsSinceEpoch()
QDateTime fromCFDate(CFDateRef date)
QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
QDateTime fromMSecsSinceEpoch(qint64 msecs)
QDateTime fromNSDate(const NSDate *date)
QDateTime fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone)
QDateTime fromSecsSinceEpoch(qint64 secs)
(since 6.4) QDateTime fromStdLocalTime(const std::chrono::local_time<std::chrono::milliseconds> &time)
(since 6.4) QDateTime fromStdTimePoint(const std::chrono::time_point<Clock, Duration> &time)
(since 6.4) QDateTime fromStdTimePoint(const std::chrono::local_time<std::chrono::milliseconds> &time)
(since 6.4) QDateTime fromStdTimePoint(std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> time)
(since 6.4) QDateTime fromStdZonedTime(const std::chrono::zoned_time<std::chrono::milliseconds, const std::chrono::time_zone *> &time)
QDateTime fromString(const QString &string, const QString &format, int baseYear, QCalendar cal)
(since 6.0) QDateTime fromString(QStringView string, Qt::DateFormat format = Qt::TextDate)
QDateTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate)
(since 6.0) QDateTime fromString(QStringView string, QStringView format, QCalendar cal)
(since 6.7) QDateTime fromString(QStringView string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
(since 6.0) QDateTime fromString(const QString &string, QStringView format, QCalendar cal)
(since 6.7) QDateTime fromString(const QString &string, QStringView format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
QDateTime fromString(const QString &string, const QString &format, QCalendar cal)
(since 6.7) QDateTime fromString(const QString &string, const QString &format, int baseYear = QLocale::DefaultTwoDigitBaseYear)
(since 6.7) QDateTime fromString(QStringView string, QStringView format, int baseYear, QCalendar cal)
(since 6.0) QDateTime fromString(const QString &string, QStringView format, int baseYear, QCalendar cal)
bool operator!=(const QDateTime &lhs, const QDateTime &rhs)
(since 6.4) QDateTime operator+(const QDateTime &dateTime, std::chrono::milliseconds duration)
(since 6.4) QDateTime operator+(std::chrono::milliseconds duration, const QDateTime &dateTime)
(since 6.4) std::chrono::milliseconds operator-(const QDateTime &lhs, const QDateTime &rhs)
(since 6.4) QDateTime operator-(const QDateTime &dateTime, std::chrono::milliseconds duration)
bool operator<(const QDateTime &lhs, const QDateTime &rhs)
QDataStream &operator<<(QDataStream &out, const QDateTime &dateTime)
bool operator<=(const QDateTime &lhs, const QDateTime &rhs)
bool operator==(const QDateTime &lhs, const QDateTime &rhs)
bool operator>(const QDateTime &lhs, const QDateTime &rhs)
bool operator>=(const QDateTime &lhs, const QDateTime &rhs)
QDataStream &operator>>(QDataStream &in, QDateTime &dateTime)

詳細な説明

QDateTime オブジェクトは、時刻表現に従って、暦日と時刻(「日時」)をエンコードします。 このクラスは、QDate クラスとQTime クラスの機能を組み合わせたものです。システムクロックから現在の日時を読み取ることができます。また、日時を比較したり、秒、日、月、年を追加して日時を操作したりするための関数も提供しています。

QDateTimeは、local time 、UTC 、指定されたoffset from UTC 、または指定されたtime zone に基づいて日付時刻を記述できます。これらの時刻表現はそれぞれ、QTimeZone クラスの適切なインスタンスにカプセル化できます。 たとえば、タイムゾーン「Europe/Berlin」では、ドイツで採用されている夏時間の規則が適用されます。対照的に、UTCからの固定オフセットである+3600秒は、UTCより1時間進んだ時刻(通常、ISO標準表記では「UTC+01:00」と表記されます)であり、夏時間による複雑な処理は発生しません。 現地時間または指定されたタイムゾーンを使用する場合、タイムゾーンの移行(below を参照)が考慮されます。QDateTimeのtimeSpec()は、4種類の時間表現のうちどれが使用されているかを返します。また、timeRepresentation()は、その時間表現に関する完全な記述をQTimeZone として提供します。

QDateTimeオブジェクトは通常、コンストラクタで日付と時刻を明示的に指定するか、currentDateTime()やfromMSecsSinceEpoch()などの静的関数を使用して作成されます。日付と時刻は、setDate()およびsetTime()を使用して変更できます。 また、1970年のUTC開始時点からの経過時間をミリ秒単位で引数とするsetMSecsSinceEpoch()関数を使用して、日付と時刻を設定することもできます。fromString()関数は、文字列と、その文字列内の日付を解釈するために使用される日付形式を指定することで、QDateTimeを返します。

QDateTime::currentDateTime() は、ローカル時間(デフォルト)などの特定の時間表現に基づいて、現在の日付と時刻を表す QDateTime を返します。QDateTime::currentDateTimeUtc() は、UTC に基づいて現在の日付と時刻を表す QDateTime を返します。これは、QDateTime::currentDateTime(QTimeZone::UTC) と同等です。

date() およびtime() 関数は、日付と時刻の各部分へのアクセスを提供します。同じ情報は、toString() 関数によってテキスト形式で提供されます。

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

addMSecs() を使用すると指定したミリ秒数だけ、addSecs() を使用すると指定した秒数だけ、addDays() を使用すると指定した日数だけ、日時を増加(または減少)させることができます。同様に、addMonths() やaddYears() を使用することもできます。daysTo() 関数は 2 つの日時間の日数を返し、secsTo() は 2 つの日時間の秒数を返し、msecsTo() は 2 つの日時間のミリ秒数を返します。これらの演算は、該当する場合、夏時間 (DST) やその他のタイムゾーンの移行を考慮しています。

toTimeZone() を使用すると、datetime を別の時間表現で再表現できます。ローカル時間、UTC、または UTC からの固定オフセットを表す軽量なQTimeZone を引数として渡すことで、datetime を対応する時間表現に変換できます。あるいは、完全なタイムゾーン(そのtimeSpec() の結果がQt::TimeZone となるもの)を渡して、代わりにそれを使用することもできます。

備考

QDateTime は閏秒を考慮しません。

文字列形式との間のすべての変換は、Cロケールを使用して行われます。ローカライズされた変換については、QLocale を参照してください。

グレゴリオ暦には西暦0年という年はありません。その年の日付は無効とみなされます。西暦-1年は「キリストの1年前」または「西暦前の1年」です。西暦1年1月1日の前日は、西暦前1年12月31日です。

現地時間(デフォルト)または指定されたタイムゾーンを使用する場合、transitions に関連する問題を解決する必要があります。その結果、そのような QDateTime インスタンスに対する操作(特にその生成)は、UTC または UTC からの固定オフセットを使用する場合に比べて、計算コストが高くなる可能性があります。

有効な日付の範囲

QDateTimeが表現できる値の範囲は、内部の格納実装に依存します。QDateTimeは現在、日付と時刻をエンコードした連続したミリ秒値として、qint64に格納されています。これにより、日付の範囲は±約2億9200万年に制限されますが、QDate の範囲は±20億年です。 極端な値でQDateTimeを作成する際は、格納領域がオーバーフローしないよう注意が必要です。サポートされる値の正確な範囲は、使用される時刻表現によって異なります。

タイムゾーンの使用

QDateTime は、システムのタイムゾーン情報を使用して、現在のローカルタイムゾーンと UTC からのオフセットを決定します。システムが正しく設定されていない場合や最新の状態ではない場合、QDateTime は誤った結果を返します。

同様に、QDateTime はシステムから提供される情報を使用して、他のタイムゾーンの UTC からのオフセットを決定します。この情報が不完全または古くなっている場合、QDateTime は誤った結果を返します。詳細については、QTimeZone のドキュメントを参照してください。

最新のUnixシステムでは、これにより、QDateTimeは可能な限り、過去のタイムゾーン移行(夏時間(DST)を含む、後述)に関する正確な情報を通常保持しています。 Windows では、システムが過去のタイムゾーンデータをサポートしていないため、タイムゾーンの移行(特に夏時間)に関して、過去の正確性は維持されません。ただし、ICU ライブラリを使用して Qt をビルドすると、QTimeZone に Unix で使用されているものと同じタイムゾーンデータベースが備わります。

タイムゾーンの移行

QDateTime は、標準時と夏時間(DST)間の移行、およびタイムゾーンの標準オフセットが変更される際に生じる移行の両方を考慮に入れます。 たとえば、移行が午前 2 時に行われ、時計が午前 3 時に進んだ場合、02:00:00 から 02:59:59.999 までの 1 時間が「欠落」することになります。 このような移行は「スプリング・フォワード」として知られており、スキップされた時刻には何の意味もありません。 逆方向の移行(「フォールバック」と呼ばれる)では、時間間隔が繰り返されます。まず旧タイムゾーン(通常は夏時間)、次に新タイムゾーン(通常は標準時間)で繰り返されるため、この間隔内の時刻は曖昧になります。

一部の地域では「逆」の夏時間を採用しており、夏は標準時、冬は(オフセットが短縮された)夏時間を用いています。 このようなタイムゾーンでは、春の「時計を1時間進める」操作は依然として春に行われ、1時間がスキップされますが、これは夏時間からの移行となります。一方、秋の「時計を1時間戻す」操作は依然として秋の1時間を繰り返しますが、これは夏時間への移行となります。

UTC 時刻(または UTC からの固定オフセットを持つ時刻)から変換する場合、どのタイムゾーンにおいても、常に明確で有効な結果が得られます。しかし、日付と時刻を組み合わせて、現地時間または特定のタイムゾーンを基準とした日時を作成する場合、名目上の結果が移行期間に該当し、無効または曖昧になる可能性があります。 この状況が発生しうるメソッドには、resolve パラメータが指定されます。要求されたdatetimeが有効かつ曖昧でない場合、このパラメータは常に無視されます。制御可能なオプションについては、TransitionResolution を参照してください。Qt 6.7以前では、これに相当するLegacyBehavior が選択されていました。

夏時間への切り替えでスキップされた期間について、リクエストされた時刻をいずれかのオフセットで解釈すると、もう一方のオフセットが使用されていた時点の実際の時刻が得られます。したがって、resolve に対してTransitionResolution::RelativeToBefore を渡すと、実際には切り替え後の時刻となり、切り替えが行われなかった場合にはリクエストされた表現が得られていたはずの時刻となります。 同様に、resolve に対してTransitionResolution::RelativeToAfter を指定すると、移行前の時刻が得られます。これは、移行がもっと早く起きていたならば、要求された表現になっていたはずの時刻です。

QDateTime が addDay() やaddSecs() などの算術演算を実行する場合、有効な結果が得られるよう配慮されています。 たとえば、02:00 から 03:00 へ時計を 1 時間進めるサマータイムの切り替え日において、01:59:59 に 1 秒を加算すると、03:00:00 になります。 前日の 02:30 に 1 日を加算すると、移行日の 03:30 になります。一方、addDay(-1) を呼び出して、翌日の 02:30 から 1 日を差し引くと、移行日の 01:30 になります。addSecs() は指定された秒数だけ時刻をオフセットしますが、addDays() は日付を調整し、そうでなければ無効な結果になる場合にのみ時刻を調整します。addDays(1) を夏時間への移行前日の03:00に適用すると、後者が前者からわずか23時間後であるにもかかわらず、移行当日の03:00が返されます。一方、addSecs(24 * 60 * 60) を適用すると、移行当日の04:00が返されます。これは、後者が24時間後であるためです。 一般的な時刻変更では、1日の長さが23時間または25時間になる日があります。

システム関数 `time_t ` で表現可能な日時(32ビットの `time_t` を使用するシステムでは1901-12-14から2038-01-18まで。型が64ビットの場合、`QDateTime` が表現可能な全範囲)については、 標準のシステムAPIを使用して、UTCからのローカル時間のオフセットを決定します。これらのシステムAPIで処理されない日時(time_t の範囲内の一部を含む可能性があります)については、利用可能な場合はQTimeZone::systemTimeZone()が使用され、利用できない場合は可能な限り正確な推定が行われます。 いずれの場合も、使用されるオフセット情報はシステムに依存するため、不完全であったり、過去の日時については歴史的に不正確であったりする可能性があります。さらに、将来の日付については、その日付が到来する前に、ローカルタイムゾーンのオフセットや夏時間(DST)のルールが変更される可能性があります。

1日単位の移行

ごく少数のタイムゾーンでは、国際日付変更線がその領域を横断する際に、1日全体が省略されたり繰り返されたりしたことがあります。これらについては、daysTo() は重複や欠落を認識せず、単に暦日の差を使用します。対照的に、msecsTo() およびsecsTo() は、実際の時間間隔を認識しています。 同様に、addMSecs() およびaddSecs() は経過時間に直接対応しますが、addDays()、addMonths()、およびaddYears() は、空白や重複に到達した際に、重複や省略による曖昧性や無効性を解決する必要がある場合を除き、名目上のカレンダーに従います。

注: ユリウス暦からグレゴリオ暦への変更など、暦の変更中に「失われた」日は 、QDateTimeには影響しません。2つの暦は日付の記述方法が異なりますが、変更をまたぐ連続する日は、いずれの暦またはそれらの toJulianDay() 値で記述されるように、それぞれ前の日よりも1日遅れた連続するQDate インスタンスによって表されます。 対照的に、1日を飛ばしたり重複させたりするタイムゾーンは、たとえそれが丸24時間分であっても、日付ではなく時間の記述を変更しているに過ぎない。

UTCからのオフセット

UTCからのオフセットは、グリニッジを基準とした東方向の秒数で測定されます。特定の日時の瞬間(例えば、特定の日の中日など)は、使用される時刻の表現方法によって異なります。UTCからのオフセットが大きいほど、任意の日時組み合わせにおいて、より早い瞬間を表し、オフセットが小さいほど、より遅い瞬間を表します。

UTCからのオフセットに明示的な大きさの制限はありませんが、±hh:mm形式を使用するtoString()およびfromString()メソッドを使用する場合、事実上±99時間59分、かつ分単位のみという範囲に制限されるという暗黙の制限があります。 現在、±14時間の範囲外にあるオフセットを持つタイムゾーンは存在せず、既知のオフセットはすべて5分の倍数であることに注意してください。歴史的なタイムゾーンは範囲が広く、秒を含むオフセットがある場合がありますが、後者は文字列では正確に表現できません。

QDate 、QTime 、QDateTimeEdit 、およびQTimeZoneも参照してください 。

メンバ型のドキュメント

[since 6.7] enum class QDateTime::TransitionResolution

この列挙型は、Timezone transitions に該当する日時組み合わせを解決するために使用されます。

現地時間または夏時間が適用されるタイムゾーンを基準として指定された日時を構築する場合、あるいはsetDate()、setTime()、setTimeZone() を使用して日時を修正する場合、指定されたパラメータは、そのタイムゾーンにおいて意味を持たない、あるいは2つの意味を持つ時間表現を暗示する可能性があります。このような時間表現は、「遷移状態」にあると記述されます。 いずれの場合も、操作が未定義であることを示すために、単に無効な日時を返すことができます。曖昧な場合には、意図され得る 2 つの時刻のうちの 1 つを選択することも可能です。意味を持たない場合には、その前後で、意図された可能性のある時刻を選択することができます。 例えば、より早い時刻から進める場合、遷移後の時刻のうち、実際にその早い時刻から指定された時間だけ経過した時刻を選択できます。ここで指定されるオプションは、そのような選択がどのように行われるかを設定します。

定数値説明
QDateTime::TransitionResolution::Reject0遷移内のいかなる時刻も無効として扱います。その時刻は実際に無効であるか、あるいは曖昧であるかのいずれかです。
QDateTime::TransitionResolution::RelativeToBefore1遷移前の時刻から順方向にステップを進めたかのように時刻を選択します。これにより、遷移前に有効だったオフセットを使用して要求された時刻が解釈され、必要に応じて、その結果が結果の時刻で有効なオフセットに変換されます。
QDateTime::TransitionResolution::RelativeToAfter2遷移後の時刻から遡ったかのように時刻を選択します。これにより、要求された時刻は遷移後に有効なオフセットを用いて解釈され、必要に応じて、結果は結果の時刻で有効なオフセットに変換されます。
QDateTime::TransitionResolution::PreferBefore3遷移前の時刻を選択します。
QDateTime::TransitionResolution::PreferAfter4遷移後の時刻を選択します。
QDateTime::TransitionResolution::PreferStandard5移行の標準時側にある時刻を選択します。
QDateTime::TransitionResolution::PreferDaylightSaving6遷移の夏時間側に位置する時刻を選択します。

追加の定数 `LegacyBehavior` は、一部のコンストラクタやセッター関数において、`TransitionResolution` パラメータのデフォルト値として使用されます。これは `RelativeToBefore` の別名であり、Qt 6.7 以前の `QDateTime ` の挙動に最も近い動作を実装しています。

addDays()、addMonths()、またはaddYears() の場合、その動作は、正の調整を加える場合はRelativeToBefore を、負の調整を加える場合はRelativeToAfter を使用することであり、これまでは(概ね)そのように動作していました。

注: 夏時間にUTCからのオフセットが増加するタイムゾーン(「正のDST」として知られる)では 、PreferStandardはRelativeToAfterの別名であり、PreferDaylightSavingはRelativeToBeforeの別名となります。 夏時間が冬にUTCからのオフセットを減少させる仕組み(「負のDST」として知られる)のタイムゾーンでは、オペレーティングシステムが(ほとんどのプラットフォームでそうであるように)日時が夏時間か標準時間かを報告している限り、逆のルールが適用されます。 一部のプラットフォームでは、Qt::TimeZone の日時であっても移行の詳細が利用できないため、QTimeZone は、UTCからのオフセットが小さい方を標準時であると推定せざるを得ず、事実上「正のDST」を仮定することになります。

以下の表は、現地時間が 02:00 から 03:00 にかけて移行があり、両側に公称標準時 LST と夏時間 LDT がある日に、QDateTime コンストラクタが 02:30 に対する要求を、考えられるさまざまなケースでどのように解決するかを示しています。 移行のタイプには、1時間をスキップする場合と、1時間を繰り返す場合があります。移行のタイプとパラメータ `resolve ` の値によって、指定された日付のどの実際の時刻が選択されるかが決まります。まず、夏時間が正の値である一般的なケースでは、次のように扱われます:

前02:00–03:00移行後resolve選択された
LSTスキップLDTRelativeToBefore03:30 LDT
LSTスキップLDTRelativeToAfter01:30 LST
LSTスキップLDT「PreferBefore」01:30 LST
LSTスキップLDT希望終了時刻03:30 LDT
LSTスキップLDT標準を優先01:30 LST
LSTスキップ夏時間夏時間を優先03:30 LDT
LDT繰り返しLSTRelativeToBefore02:30 LDT
LDT繰り返しLSTRelativeToAfter02:30 LST
LDT繰り返しLSTPreferBefore02:30 LDT
LDT繰り返しLST推奨終了時刻02:30 LST
LDT繰り返しLST優先標準時02:30 LST
LDT繰り返しLST夏時間を優先02:30 LDT

次に、負の夏時間制度のケースについてです。これは、冬にLDTを採用し、夏への移行時に1時間をスキップしてLSTに移行し、冬に戻る際の移行時に1時間を戻すというものです:

LDTスキップLST以前との比較03:30 LST
LDTスキップLSTRelativeToAfter01:30 LDT
LDTスキップLSTPreferBefore01:30 LDT
LDTスキップLST希望の終了時刻03:30 LST
LDTスキップLST標準を優先03:30 LST
LDTスキップLST夏時間を優先01:30 LDT
LST繰り返しLDTRelativeToBefore02:30 LST
LST繰り返しLDTRelativeToAfter02:30 LDT
LST繰り返しLDTPreferBefore02:30 LST
LST繰り返しLDT推奨終了時刻02:30 LDT
LST繰り返しLDT標準を優先02:30 LST
LST繰り返しLDT夏時間を優先02:30 LDT

Reject を使用すると、関連するQDateTime API に無効な datetime オブジェクトを返すよう促すことができます。これにより、コード側で移行を独自に処理できるようになります。例えば、ユーザーが選択した日時が移行期間内にあることをユーザーに警告し、競合や曖昧さを解決する機会を提供することができます。 これを使用するコードでは、自身(またはユーザー)による解決に使用する関連情報を決定するために、上記の他のオプションが役立つでしょう。移行の開始または終了、あるいは移行そのものの瞬間が適切な解決策である場合は、QTimeZone の移行 API を使用してその情報を取得できます。secsTo() を使用して、前日の正午と翌日の正午の間の実際の時間を測定することで、その遷移が「繰り返し区間」か「スキップ区間」かを判断できます。結果は、スキップ区間(夏時間の開始など)の場合は 48 時間未満となり、繰り返し区間(夏時間の終了など)の場合は 48 時間以上となります。

注: Reject以外の解決策が指定された場合 、可能であれば有効なQDateTime オブジェクトが返されます。要求された日時がギャップに該当する場合、返される日時には要求されたtime()が含まれません。また、1日分がスキップされた場合は、date()も含まれない場合があります。 したがって、date() およびtime() の結果を要求された値と比較することで、ギャップが発生したかどうかを検出できます。

他の日付・時刻関連ソフトウェアとの関係

Python プログラミング言語の datetime API には、RelativeToBefore (fold = True) およびRelativeToAfter (fold = False) に対応するfold パラメータがあります。

JavaScriptのDate に代わるものとして提案されているTemporal では、disambiguation パラメータの値として、遷移の解決方法に関する4つのオプションが用意されています。その'reject' は例外を発生させますが、これはReject が不正な結果を生成することに大まかに相当します。その'earlier' および'later' オプションは、PreferBefore およびPreferAfter に対応しています。その'compatible' オプションは、RelativeToBefore (およびPythonのfold = True )に対応しています。

この列挙型は Qt 6.7 で導入されました。

Timezone transitionsも参照してください 。

enum class QDateTime::YearRange

この列挙型は、QDateTime で表される年(グレゴリオ暦)の範囲を表します:

定数値説明
QDateTime::YearRange::First-292275056この年の後半は表現可能
QDateTime::YearRange::Last+292278994この年の前半の期間は表現可能です

表現可能な日付と時刻の正確な最初と最後はこれらの年の範囲内にあり、使用されるtimeRepresentation()によって異なります。これらは、fromMSecsSinceEpoch()に適切な値を渡すことで決定できます。

これら2つの年の間に厳密に含まれるすべての日付も表現可能です。ただし、グレゴリオ暦には西暦0年が存在しないことに注意してください。

注: QDate は、 より広い年範囲の日付を記述できます。QDateTime がサポートできる年範囲は1970年を基準に前後2億9200万年に及ぶため、ほとんどの用途ではこの違いはほとんど影響しません。

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

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

QDateTime::QDateTime(QDate date, QTime time, const QTimeZone &timeZone, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)

指定された `date ` および `time` を使用し、timeZone で定義されている時刻の表現形式に基づいて、datetime オブジェクトを生成します。

date が有効で、time が無効な場合、時刻は午前0時に設定されます。timeZone が無効な場合、datetimeは無効となります。date およびtime が、timeZone における遷移に近い時点を表している場合、resolve はその状況の解決方法を制御します。

注: Qt 6.7以前のこの関数のバージョンには 、resolve パラメータがなかったため、遷移に関連する曖昧さを解決する手段がありませんでした。

[noexcept] QDateTime::QDateTime()

ローカル時間を基準として、NULLのdatetimeオブジェクトを生成します。

nullの日時データは、日付と時刻が無効であるため、無効です。

isValid()、setMSecsSinceEpoch()、setDate()、setTime()、およびsetTimeZone()も参照してください 。

[since 6.5] QDateTime::QDateTime(QDate date, QTime time, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)

指定されたdate およびtime を用いて、現地時間に基づいてdatetimeオブジェクトを生成します。

date が有効で、time が無効な場合、時刻として午前0時が使用されます。date とtime が現地時間の切り替え時刻に近い時点を表している場合、resolve によってその状況の処理方法が制御されます。

注: Qt 6.7以前のこの関数のバージョンには 、resolve パラメータがなかったため、遷移に関連する曖昧さを解決する方法がありませんでした。

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

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

[noexcept] QDateTime::QDateTime(const QDateTime &other)

other の日時データのコピーを作成します。

[noexcept] QDateTime::QDateTime(QDateTime &&other)

一時的なother の日時オブジェクトの内容をこのオブジェクトに移し、other を未指定(ただし適切な)な状態のままにします。

[noexcept] QDateTime::~QDateTime()

datetime を破棄します。

QDateTime QDateTime::addDays(qint64 ndays) const

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

timeSpec() がQt::LocalTime またはQt::TimeZone であり、その結果の日時が標準時から夏時間への移行時間帯に該当する場合、結果は変更の方向に向かって、この境界をわずかに超えた時点になります。 移行が午前 2 時で、時計が午前 3 時に進められる場合、午前 2 時から午前 3 時の間をターゲットとした結果は、午前 2 時より前(ndays < 0 の場合)または午前 3 時より後(それ以外の場合)になるように調整されます。

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

[since 6.4] QDateTime QDateTime::addDuration(std::chrono::milliseconds msecs) const

このオブジェクトの日時よりmsecs ミリ秒後の日時(msecs が負の値の場合はそれより前の日時)を含むQDateTime オブジェクトを返します。

この日時が無効な場合、無効な日時が返されます。

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

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

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

QDateTime QDateTime::addMSecs(qint64 msecs) const

このオブジェクトの日時よりmsecs ミリ秒後の日時(msecs が負の値の場合はそれより前の日時)を含むQDateTime オブジェクトを返します。

この日時が無効な場合、無効な日時が返されます。

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

QDateTime QDateTime::addMonths(int nmonths) const

このオブジェクトの日時よりnmonths ヶ月後の日時(nmonths が負の場合はそれより前の日時)を含むQDateTime オブジェクトを返します。

timeSpec() がQt::LocalTime またはQt::TimeZone であり、その結果得られる日時が標準時と夏時間の切り替え時刻に含まれる場合、結果は切り替えの境界をわずかに越えた、変更の方向となる。 移行が午前 2 時に行われ、時計が午前 3 時に進められる場合、午前 2 時から午前 3 時の間を指定した結果は、午前 2 時より前(nmonths < 0 の場合)または午前 3 時より後(それ以外の場合)になるように調整されます。

daysTo()、addDays()、addYears()、addSecs()、およびTimezone transitionsも参照してください 。

QDateTime QDateTime::addSecs(qint64 s) const

このオブジェクトの日時よりs 秒後の日時(s が負の値の場合はそれより前の日時)を含むQDateTime オブジェクトを返します。

この日時が無効な場合、無効な日時が返されます。

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

QDateTime QDateTime::addYears(int nyears) const

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

timeSpec() がQt::LocalTime またはQt::TimeZone であり、結果の日時が標準時から夏時間への移行時間帯に含まれる場合、結果は、変更の方向に向かって、この境界をわずかに超えた時点になります。 移行が午前 2 時で、時計が午前 3 時に進められる場合、午前 2 時から午前 3 時の間を指定した結果は、午前 2 時より前(nyears < 0 の場合)または午前 3 時より後(それ以外の場合)になるように調整されます。

daysTo()、addDays()、addMonths()、addSecs()、およびTimezone transitionsも参照してください 。

[static, since 6.5] QDateTime QDateTime::currentDateTime(const QTimeZone &zone)

zone で規定されている時刻表記形式を用いて、システムクロックの現在の日時を返します。zone が省略された場合は、現地時間が使用されます。

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

currentDateTimeUtc()、QDate::currentDate()、QTime::currentTime()、およびtoTimeZone()も参照してください 。

[static] QDateTime QDateTime::currentDateTime()

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

[static] QDateTime QDateTime::currentDateTimeUtc()

システムクロックの現在の日時を、UTC 形式で返します。

currentDateTime(QTimeZone::UTC) と同等です。

currentDateTime()、QDate::currentDate()、QTime::currentTime()、およびtoTimeZone()も参照してください 。

[static noexcept] qint64 QDateTime::currentMSecsSinceEpoch()

1970年の開始時点(UTC)からの現在の経過時間(ミリ秒単位)を返します。

この数値は POSIX の `time_t` 変数と同様ですが、秒単位ではなくミリ秒単位で表されます。

currentDateTime()、currentDateTimeUtc()、およびtoTimeZone()も参照してください 。

[static noexcept] qint64 QDateTime::currentSecsSinceEpoch()

1970年の開始時点(UTC)からの経過秒数を返します。

この数値は、POSIXの`time_t`変数と同様です。

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

QDate QDateTime::date() const

datetime の日付部分を返します。

setDate()、time()、およびtimeRepresentation()も参照してください 。

qint64 QDateTime::daysTo(const QDateTime &other) const

この日時から「other 」の日時までの日数を返します。

日数は、この日時とother の日時の間に、深夜0時を迎える回数を数えて算出されます。つまり、23:55から翌日の0:05までの10分の差は、1日としてカウントされます。

other の日時がこの日時よりも前の場合、返される値は負の数になります。いずれかの日時が無効な場合、値は 0 になります。

例:

QDateTime startDate(QDate(2012, 7, 6),QTime(8, 30, 0));
QDateTime endDate(QDate(2012, 7, 7),QTime(16, 30, 0));
qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);

startDate=QDateTime(QDate(2012, 7, 6),QTime(23, 55, 0));
endDate=QDateTime(QDate(2012, 7, 7),QTime(0, 5, 0));
qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);

qSwap(startDate, endDate); // Make endDate before startDate.
qDebug() << "Days from startDate to endDate: " << startDate.daysTo(endDate);

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

[static] QDateTime QDateTime::fromCFDate(CFDateRef date)

CFDatedate のコピーを含む新しいQDateTime を作成します。

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

[static] QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)

1970年の開始時刻(UTC)から、指定されたミリ秒数msecs を経た時点を表すdatetimeを返します。この時刻の記述方法はtimeZone で規定されています。デフォルトの時刻表現は現地時間です。

msecs の値には、QDateTime で定義された有効範囲外のもの(負の値および正の値)が含まれる可能性があることに注意してください。これらの値に対して、この関数の挙動は未定義となります。

fromSecsSinceEpoch()、toMSecsSinceEpoch()、およびsetMSecsSinceEpoch()も参照してください 。

[static] QDateTime QDateTime::fromMSecsSinceEpoch(qint64 msecs)

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

[static] QDateTime QDateTime::fromNSDate(const NSDate *date)

NSDatedate のコピーを含む新しいQDateTime を生成します。

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

[static] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs, const QTimeZone &timeZone)

1970年の開始時刻(UTC)から、指定された秒数secs が経過した時点を表すdatetimeを返します。この時刻の記述形式はtimeZone で指定された通りです。デフォルトの時刻表現は現地時間です。

secs の値には、QDateTime で定義された有効範囲外のもの(負の値および正の値)が含まれる可能性があることに注意してください。これらの値に対して、この関数の挙動は未定義となります。

fromMSecsSinceEpoch()、toSecsSinceEpoch()、およびsetSecsSinceEpoch()も参照してください 。

[static] QDateTime QDateTime::fromSecsSinceEpoch(qint64 secs)

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

[static, since 6.4] QDateTime QDateTime::fromStdLocalTime(const std::chrono::local_time<std::chrono::milliseconds> &time)

1970-01-01T00:00:00.000(現地時間)(Qt::LocalTime )から数えて、time で表されるミリ秒数に相当する日付と時刻を持つ datetime オブジェクトを生成します。

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

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

toStdSysMilliseconds() およびfromMSecsSinceEpoch()も参照してください 。

[static, since 6.4] template <typename Clock, typename Duration> QDateTime QDateTime::fromStdTimePoint(const std::chrono::time_point<Clock, Duration> &time) requires requires(const std::chrono::time_point<Clock, Duration> &t) { // the clock can be converted to system_clock std::chrono::clock_cast<std::chrono::system_clock>(t); // after the conversion to system_clock, the duration type // we get is convertible to milliseconds requires std::is_convertible_v< system_clock_cast_duration<Clock, Duration>, std::chrono::milliseconds >; }

Qt::UTC を時刻表現として使用し、time と同じ時点を表す datetime オブジェクトを生成します。

time のクロックは、std::chrono::system_clock と互換性がある必要があります。特に、std::chrono::clock_cast でサポートされている変換が存在する必要があります。変換後、結果の期間型はstd::chrono::milliseconds に変換可能でなければなりません。

そうでない場合、呼び出し元は、この関数への入力が上記の制約を満たすように、std::chrono::system_clock への必要なクロック変換および所要時間型の必要な変換(キャスト/丸め/切り捨て/切り上げ/…)を実行しなければならない。

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

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

関連項目: toStdSysMilliseconds() およびfromMSecsSinceEpoch()。

[static, since 6.4] QDateTime QDateTime::fromStdTimePoint(const std::chrono::local_time<std::chrono::milliseconds> &time)

1970-01-01T00:00:00.000(ローカル時間:Qt::LocalTime )から数えて、time で表されるミリ秒数に相当する日付と時刻を持つ datetime オブジェクトを生成します。

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

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

toStdSysMilliseconds() およびfromMSecsSinceEpoch()も参照してください 。

[static, since 6.4] QDateTime QDateTime::fromStdTimePoint(std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds> time)

`Qt::UTC ` を時刻表現として使用し、time と同じ時点を表す datetime オブジェクトを生成します。

この関数は、QDateTime::fromStdTimePoint() をオーバーロードします。

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

[static, since 6.4] QDateTime QDateTime::fromStdZonedTime(const std::chrono::zoned_time<std::chrono::milliseconds, const std::chrono::time_zone *> &time)

time と同じ時点を表すdatetimeを生成します。結果は、time のタイムゾーンで表されます。

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

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

関連項目: QTimeZone 、toStdSysMilliseconds()、fromMSecsSinceEpoch()。

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

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

calendarcal が指定されている場合はそれを使用し、指定されていない場合はグレゴリオ暦を使用します。

format で年の下2桁のみが指定されている場合、baseYear から始まる100年間が最初に候補として検討されます。 バージョン 6.7 以前にはbaseYear パラメータが存在せず、常に 1900 が使用されていました。これはbaseYear のデフォルト設定であり、その年から 1999 年までの範囲から年が選択されます。場合によっては、指定されたすべてのフィールドと整合性のある結果を得るために、他のフィールドによって次の世紀または前の世紀が選択されることがあります。詳細については、QDate::fromString() を参照してください。

QDate::fromString() およびQTime::fromString() によって、日付と時刻の一部を表す形式文字列内で認識される式に加え、このメソッドは以下をサポートしています:

式出力
tタイムゾーン(オフセット、名前、「Z」、または「UTC」という接頭辞が付いたオフセット)
tt時と分の間にコロンを含まないオフセット形式のタイムゾーン(例:「+0200」)
ttt時間と分の間にコロンを含むオフセット形式のタイムゾーン(例:「+02:00」)
ttttタイムゾーン名。QTimeZone::displayName() が `QTimeZone::LongName ` に対して返す値、またはそのタイムゾーンの IANA ID のいずれか(例: "Europe/Berlin")。認識される名前はQTimeZone で定義されているものであり、使用しているオペレーティングシステムによって異なる場合があります。

't' 形式指定子が指定されていない場合は、システムのローカルタイムゾーンが使用されます。その他のすべてのフィールドのデフォルト値については、QDate::fromString() およびQTime::fromString() を参照してください。

例:

QDateTime dateTime = QDateTime::fromString("1.30.1", "M.d.s");
// dateTime is January 30 in 1900 at 00:00:01.
dateTime = QDateTime::fromString("12", "yy");
// dateTime is January 1 in 1912 at 00:00:00.

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

QTime time1 = QTime::fromString("131", "HHh");
// time1 is 13:00:00
QTime time2 = QTime::fromString("1apA", "1amAM");
// time2 is 01:00:00

QDateTime dateTime2 = QDateTime::fromString("M1d1y9800:01:02",
                                            "'M'M'd'd'y'yyhh:mm:ss");
// dateTime is 1 January 1998 00:01:02

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

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

先頭にゼロのない式(d、M、h、m、s、z)は「貪欲」に処理されます。つまり、範囲外になったり、他のセクションに割り当てる桁数が不足したりする場合でも、2桁(zの場合は3桁)を使用します。

QDateTime dateTime = QDateTime::fromString("130", "Mm"); // January, 30 mins

これにより、1月1日 00:30.00 となる可能性があったが、Mが2桁を占有してしまう。

string のフィールドが誤って指定されると、無効なQDateTime が返されます。サポートされるのは、ローカル時間の西暦100年の初めから9999年の終わりまでの日付・時刻のみです。 この範囲の端に近い日時が、他のタイムゾーン(特にUTCを含む)では、ローカルのタイムゾーンによっては範囲外となり(したがって無効として扱われる)、注意が必要である。

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

注: フォーマット文字が、それを使用する上記の表の中で最も長い式よりも多く繰り返される場合 、フォーマットのその部分は、区切り文字なしで複数の式として読み取られます。つまり、上記の最も長い式が、そのコピー数だけ繰り返され、最後に短い式が余りとして残る形になります。 したがって、'tttttt' は"Europe/BerlinEurope/Berlin" と一致し、タイムゾーンをベルリン時間に設定します。もし日時文字列に「Europe/BerlinZ」が含まれていた場合、これは「一致」しますが、一貫性のない結果となり、無効な日時となります。

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

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

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

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

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

string で表されるQDateTime を、指定されたformat を使用して返します。これが不可能な場合は、無効な日付時刻を返します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

bool QDateTime::isDaylightTime() const

この日時が夏時間の期間に含まれる場合に返します。

Qt::TimeSpec がQt::LocalTime またはQt::TimeZone でない場合、常にfalseを返します。

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

bool QDateTime::isNull() const

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

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

bool QDateTime::isValid() const

このdatetimeが特定の時点を表す場合はtrue を返し、そうでない場合はfalse を返します。

datetime が有効であるためには、その日付と時刻の両方が有効であり、かつ使用されている時刻の表現形式がその組み合わせに対して有効な意味を持つ必要があります。 時刻の表現が特定のタイムゾーンまたは現地時間である場合、夏時間の切り替えで 1 時間がスキップされる場合(通常は春の夜)など、そのタイムゾーンの表現においてスキップされる時間帯が特定の日付にあることがあります。 たとえば、夏時間が午前 2 時に終了し、時計が午前 3 時に進む場合、その日の 02:00:00 から 02:59:59.999 までの日時は無効となります。

QDateTime::YearRange 、QDate::isValid()、およびQTime::isValid()も参照してください 。

qint64 QDateTime::msecsTo(const QDateTime &other) const

この日時から「other 」の日時までのミリ秒数を返します。

比較を実行する前に、2つの日時がQt::UTC に変換されます。これは、2つの日時のうち一方に夏時間(DST)が適用され、もう一方には適用されない場合でも、結果が正しいことを保証するためです。

other の日時が、この日時よりも前の場合、返される値は負の数になります。いずれかの日時が無効な場合は 0 を返します。

関連項目: addMSecs()、daysTo()、QTime::msecsTo()。

int QDateTime::offsetFromUtc() const

この日時からUTCまでのオフセットを秒単位で返します。

結果は `timeSpec()` の値によって異なります:

  • Qt::UTC オフセットは 0 です。
  • Qt::OffsetFromUTC オフセットは、当初設定された値となります。
  • Qt::LocalTime UTC からの現地時間のオフセットが返されます。
  • Qt::TimeZone タイムゾーンで使用されるオフセットが返されます。

最後の 2 つについては、夏時間オフセットを考慮した上で、この日付と時刻におけるオフセットが返されます。 オフセットは、現地時間または指定されたタイムゾーンの時間と UTC 時間の差です。UTC より進んでいるタイムゾーン(本初子午線の東)では正の値となり、UTC より遅れているタイムゾーン(本初子午線の西)では負の値となります。

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

qint64 QDateTime::secsTo(const QDateTime &other) const

この日時から「other 」の日時までの秒数を返します。

比較を行う前に、2つのdatetimeはQt::UTC に変換されます。これは、2つのdatetimeのうち一方に夏時間(DST)が適用され、もう一方には適用されない場合でも、結果が正確になるようにするためです。

other の日時が、この日時よりも前の場合、返される値は負の数になります。いずれかの日時が無効な場合は、0 を返します。

例:

QDateTime now=QDateTime::currentDateTime();
QDateTime xmas(QDate(now.date().year(), 12, 25).startOfDay());
qDebug("There are %d seconds to Christmas", now.secsTo(xmas));

addSecs()、daysTo()、およびQTime::secsTo()も参照してください 。

void QDateTime::setDate(QDate date, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)

この日時オブジェクトの日付部分をdate に設定します。

まだ時刻が設定されていない場合は、午前0時に設定されます。date が無効な場合、このQDateTime も無効になります。

date およびtime() が、この日時オブジェクトの時間表現における遷移に近い瞬間を表している場合、resolve によってその状況の解決方法が制御されます。

注: Qt 6.7以前のこの関数のバージョンには resolve パラメータがなかったため、遷移に関連する曖昧性を解決する方法がありませんでした。

関連項目: date()、setTime()、およびsetTimeZone()。

void QDateTime::setMSecsSinceEpoch(qint64 msecs)

1970年のUTC開始時刻から、指定されたミリ秒数(msecs )を経た時点を表す日時を設定します。

タイムゾーンをサポートしていないシステムでは、この関数は、現地時間がQt::UTC であるかのように動作します。

なお、msecs にqint64 (std::numeric_limits<qint64>::min()) の最小値を引き渡すと、未定義の挙動となることに注意してください。

setSecsSinceEpoch()、toMSecsSinceEpoch()、およびfromMSecsSinceEpoch()も参照してください 。

void QDateTime::setSecsSinceEpoch(qint64 secs)

1970年のUTC開始時刻から、指定された秒数(secs )が経過した時点を表す日時を設定します。

タイムゾーンをサポートしていないシステムでは、この関数は、現地時間がQt::UTC であるかのように動作します。

setMSecsSinceEpoch()、toSecsSinceEpoch()、およびfromSecsSinceEpoch()も参照してください 。

void QDateTime::setTime(QTime time, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)

このdatetimeの時刻部分をtime に設定します。time が有効でない場合、この関数はそれを深夜0時に設定します。したがって、QDateTime に設定された時刻を、デフォルトのQTime に設定することで、その時刻をクリアすることが可能です:

QDateTime dt = QDateTime::currentDateTime();
dt.setTime(QTime());

date() とtime が、この日時(datetime)の時間表現における遷移に近い瞬間を表している場合、resolve はその状況をどのように解決するかを制御します。

注: Qt 6.7以前のこの関数の バージョンにはresolve パラメータがなかったため、遷移に関連する曖昧さを解決する手段がありませんでした。

関連項目: time()、setDate()、setTimeZone()も参照してください 。

void QDateTime::setTimeZone(const QTimeZone &toZone, QDateTime::TransitionResolution resolve = TransitionResolution::LegacyBehavior)

このdatetimeで使用されるタイムゾーンをtoZone に設定します。

このdatetimeは、別の時点を指している可能性があります。toZone の時刻表現を使用するため、変更されていないdate()およびtime()の意味が変わる可能性があります。

toZone が無効な場合、この日時も無効となります。それ以外の場合、呼び出し後のこの日時のtimeSpec()はtoZone.timeSpec() と一致します。

date() およびtime() が、toZone における遷移に近い瞬間を表している場合、resolve はその状況をどのように解決するかを制御します。

注: Qt 6.7以前のこの関数の バージョンには、resolve パラメータがなかったため、遷移に関連する曖昧さを解消する方法がありませんでした。

関連項目: timeRepresentation()、timeZone()、およびQt::TimeSpec 。

[noexcept] void QDateTime::swap(QDateTime &other)

この日時をother と入れ替えます。この処理は非常に高速で、失敗することはありません。

QTime QDateTime::time() const

datetime の時刻部分を返します。

setTime()、date()、およびtimeRepresentation()も参照してください 。

[since 6.5] QTimeZone QDateTime::timeRepresentation() const

このdatetimeが時間をどのように表しているかを識別するQTimeZone を返します。

返されるQTimeZone のtimeSpec()は、このdatetimeのそれと同じになります。もしそれがQt::TimeZone でない場合、返されるQTimeZone は時刻表現となります。timeSpec()がQt::OffsetFromUTC の場合、返されるQTimeZone のfixedSecondsAheadOfUtc()がオフセットを提供します。timeSpec()がQt::TimeZone の場合、QTimeZone オブジェクト自体がそのタイムゾーンの完全な表現となります。

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

timeZone()、setTimeZone()、およびQTimeZone::asBackendZone()も参照してください 。

Qt::TimeSpec QDateTime::timeSpec() const

datetime の時間指定を返します。

これは、その時刻表現を「ローカル時間」、「UTC」、「UTCからの固定オフセット(オフセットの指定なし)」、または「タイムゾーン(そのタイムゾーンの詳細を指定しない)」のいずれかに分類します。timeRepresentation().timeSpec() と同等です。

setTimeZone()、timeRepresentation()、date()、およびtime()も参照してください 。

QTimeZone QDateTime::timeZone() const

datetime のタイムゾーンを返します。

結果は `timeRepresentation().asBackendZone()` と同じです。いずれの場合も、結果の `timeSpec()` は `Qt::TimeZone` となります。

timeSpec()がQt::LocalTime の場合、結果は本メソッドが呼び出された時点の現地時間を表します。たとえ元となったQDateTime が変更されたとしても、その後のシステムタイムゾーンの変更は反映されません。

関連項目: timeRepresentation()、setTimeZone()、Qt::TimeSpec 、およびQTimeZone::asBackendZone()。

QString QDateTime::timeZoneAbbreviation() const

この日時に対応するタイムゾーンの略称を返します。

返される文字列は、timeSpec() の値によって異なります:

  • Qt::UTC () の場合、返される文字列は「UTC」となります。
  • Qt::OffsetFromUTC の場合、形式は「UTC±00:00」となります。
  • Qt::LocalTime の場合、ホストシステムに問い合わせが行われます。
  • Qt::TimeZone の場合、関連付けられた `QTimeZone ` オブジェクトが照会されます。

注:略語が一 意であるとは限りません。つまり、異なるタイムゾーンでも同じ略語が使用される場合があります。Qt::LocalTime およびQt::TimeZone の場合、ホストシステムから返される略語は、ローカライズされていることがあります。

timeSpec() およびQTimeZone::abbreviation()も参照してください 。

CFDateRef QDateTime::toCFDate() const

QDateTime からCFDateを作成します。

呼び出し元が CFDate オブジェクトを所有し、その解放も担当します。

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

QDateTime QDateTime::toLocalTime() const

この日時を現地時間に換算したコピーを返します。

結果は、この日時と同じ時点を表し、この日時と等しくなります。

例:

QDateTime UTC(QDateTime::currentDateTimeUtc());
QDateTime local(UTC.toLocalTime());
qDebug() << "UTC time is:" << UTC;
qDebug() << "Local time is:" << local;
qDebug() << "No difference between times:" << UTC.secsTo(local);

toTimeZone()、toUTC()、およびtoOffsetFromUtc()も参照してください 。

qint64 QDateTime::toMSecsSinceEpoch() const

1970年のUTC開始時刻からの経過ミリ秒数として、日時を返します。

タイムゾーンをサポートしていないシステムでは、この関数は、現地時間がQt::UTC であるかのように動作します。

このオブジェクトに格納されている日時が無効な場合、この関数の挙動は未定義となります。ただし、有効な日付についてはすべて、この関数は一意の値を返します。

toSecsSinceEpoch()、setMSecsSinceEpoch()、およびfromMSecsSinceEpoch()も参照してください 。

NSDate *QDateTime::toNSDate() const

QDateTime からNSDateを作成します。

NSDateオブジェクトはオートリリースされます。

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

QDateTime QDateTime::toOffsetFromUtc(int offsetSeconds) const

指定されたoffsetSeconds を用いて、このdatetimeをQt::OffsetFromUTC 仕様に変換したコピーを返します。toTimeZone(QTimeZone::fromSecondsAheadOfUtc(offsetSeconds)) と同等です。

offsetSeconds が0の場合、UTCの日時が返されます。

結果は、この日時と同じ時点を表し、この日時と等しくなります。

offsetFromUtc() およびtoTimeZone()も参照してください 。

qint64 QDateTime::toSecsSinceEpoch() const

1970年のUTC開始時刻からの経過秒数として、日時を返します。

タイムゾーンをサポートしていないシステムでは、この関数は、現地時間が `Qt::UTC` であるかのように動作します。

このオブジェクトに格納されている日時が有効でない場合、この関数の動作は未定義となります。ただし、有効な日付については、この関数は一意の値を返します。

toMSecsSinceEpoch()、fromSecsSinceEpoch()、およびsetSecsSinceEpoch()も参照してください 。

[since 6.4] std::chrono::sys_time<std::chrono::milliseconds> QDateTime::toStdSysMilliseconds() const

std::chrono::system_clock をクロックとして使用し、このdatetimeオブジェクトをミリ秒単位で表される同等の時刻に変換します。

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

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

fromStdTimePoint() およびtoMSecsSinceEpoch()も参照してください 。

[since 6.4] std::chrono::sys_seconds QDateTime::toStdSysSeconds() const

このdatetimeオブジェクトを、std::chrono::system_clock を時計として使用し、秒単位で表された同等の時刻に変換します。

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

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

fromStdTimePoint() およびtoSecsSinceEpoch()も参照してください 。

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

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

datetimeを文字列として返します。format パラメータは、結果の文字列の形式を決定します。cal が指定された場合、日付の表現に使用される暦が決定されます。デフォルトはグレゴリオ暦です。Qt 5.14以前では、cal パラメータは存在せず、常にグレゴリオ暦が使用されていました。format パラメータでサポートされている日時指定子については、それぞれQTime::toString()およびQDate::toString()を参照してください。

一重引用符で囲まれた空でない文字列は、たとえ書式指定文字が含まれていても、出力文字列に(引用符を除いて)そのまま含まれます。 2 つの連続した一重引用符("''")は、文字列をそのまま出力する区切りとして扱われるのではなく、出力では一重引用符に置き換えられます。フォーマット文字列内のその他のすべての文字は、出力文字列にそのまま含まれます。

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

フォーマット文字列の例(QDateTime が2001年5月21日 14:13:09.120であると仮定):

フォーマット結果
dd.MM.yyyy21.05.2001
ddd MMMM d yy2001年5月21日(火) 01
hh:mm:ss.zzz14:13:09.120
hh:mm:ss.z14:13:09.12
h:m:s ap午後 2:13:9

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

注:日 および月の名前、ならびに AM/PM の表示は英語(C ロケール)で指定されます。ローカライズされた月および日の名前、ならびにローカライズされた AM/PM の形式を取得するには、QLocale::system().toDateTime() を使用してください。

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

QString QDateTime::toString(QStringView format) const

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

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

指定されたformat に従って、datetimeを文字列として返します。

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

format がQt::ISODate の場合、文字列の形式は日付および時刻の表現に関するISO 8601拡張仕様に準拠し、QDateTime のtimeSpec()に応じて、yyyy-MM-ddTHH:mm:ss[Z|±HH:mm]という形式をとります。timeSpec()がQt::UTC の場合、文字列の末尾にZが追加されます。timeSpec()がQt::OffsetFromUTC の場合、UTCからのオフセット(時間および分)が文字列の末尾に追加されます。 ISO 8601 日付にミリ秒を含めるには、format Qt::ISODateWithMs を使用します。これは yyyy-MM-ddTHH:mm:ss.zzz[Z|±HH:mm] に対応します。

format がQt::RFC2822Date の場合、文字列はRFC 2822に従ってフォーマットされます。

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

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

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

関連項目: fromString()、QDate::toString()、QTime::toString()、およびQLocale::toString()。

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

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

QDateTime QDateTime::toTimeZone(const QTimeZone &timeZone) const

指定されたtimeZone に変換された、このdatetimeのコピーを返します。

結果は、この日時と同じ時点を表し、この日時と等しくなります。

結果は、timeZone の時刻表現を用いてその時点を表します。例えば:

QDateTime local(QDateTime::currentDateTime());
QDateTime UTC(local.toTimeZone(QTimeZone::UTC));
qDebug() << "Local time is:" << local;
qDebug() << "UTC time is:" << UTC;
qDebug() << "No difference between times represented:" << local.secsTo(UTC);

timeZone が無効な場合、datetimeも無効となります。それ以外の場合は、返されるdatetimeのtimeSpec()の値がtimeZone.timeSpec() と一致します。

timeRepresentation()、toLocalTime()、toUTC()、およびtoOffsetFromUtc()も参照してください 。

QDateTime QDateTime::toUTC() const

この日時をUTCに変換したコピーを返します。

結果は、この日時と同じ時点を表し、この日時と等しくなります。

例:

QDateTime local(QDateTime::currentDateTime());
QDateTime UTC(local.toUTC());
qDebug() << "Local time is:" << local;
qDebug() << "UTC time is:" << UTC;
qDebug() << "No difference between times:" << local.secsTo(UTC);

toTimeZone()、toLocalTime()、およびtoOffsetFromUtc()も参照してください 。

[since 6.4] QDateTime &QDateTime::operator+=(std::chrono::milliseconds duration)

指定されたduration を追加して、このdatetimeオブジェクトを変更します。

duration が正の値の場合は更新後のオブジェクトがそれより後の時刻になり、負の値の場合はそれより前の時刻になります。この datetime オブジェクトへの参照を返します。

この datetime が無効な場合、この関数は何の効果も持ちません。

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

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

[since 6.4] QDateTime &QDateTime::operator-=(std::chrono::milliseconds duration)

指定されたduration を引くことで、このdatetimeオブジェクトを変更します。

duration が正の値の場合、更新後のオブジェクトはそれより前の時刻になり、負の値の場合はそれより後の時刻になります。このdatetimeオブジェクトへの参照を返します。

この日時が無効な場合、この関数は何の効果も持ちません。

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

addMSecsも参照してください 。

[noexcept] QDateTime &QDateTime::operator=(const QDateTime &other)

other のdatetimeをここにコピーし、そのコピーを返します。

関連する非メンバー

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

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

異なる時刻表現を使用する2つのdatetimeは、UTCからのオフセットが異なる場合があります。この場合、date()とtime()の値が異なっていても、その差がUTCオフセットの差と一致すれば、それらは等価とみなされることがあります。date() とtime() が一致する場合、UTCからのオフセットが大きい方が、オフセットが小さい方よりも小さい(早い)とみなされます。 その結果、日時には弱い順序関係しか存在しません。

5.14以降、すべての無効な日時が等価であり、すべての有効な日時より小さいとみなされます。

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

[since 6.4] QDateTime operator+(const QDateTime &dateTime, std::chrono::milliseconds duration)

[since 6.4] QDateTime operator+(std::chrono::milliseconds duration, const QDateTime &dateTime)

dateTime よりduration ミリ秒後の日時(duration が負の値の場合はそれより前の日時)を含むQDateTime オブジェクトを返します。

dateTime が無効な場合、無効なdatetimeが返されます。

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

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

[since 6.4] std::chrono::milliseconds operator-(const QDateTime &lhs, const QDateTime &rhs)

lhs からrhs までの時間をミリ秒単位で返します。

lhs がrhs より前の場合、結果は負の値になります。いずれかのdatetimeが無効な場合は0msを返します。

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

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

[since 6.4] QDateTime operator-(const QDateTime &dateTime, std::chrono::milliseconds duration)

dateTime よりduration ミリ秒早い(duration が負の値の場合は より遅い)datetime を含むQDateTime オブジェクトを返します。

dateTime が無効な場合、無効な日時が返されます。

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

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

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

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

異なる時刻表現を使用する 2 つの日時には、UTC からのオフセットが異なる場合があります。この場合、date() とtime() の値が異なっていても、その差が UTC オフセットの差と一致すれば、それらは等価とみなされることがあります。date() とtime() が一致する場合、UTC からのオフセットが大きい方が、オフセットが小さい方よりも小さい(早い)とみなされます。 その結果、日時には弱い順序関係しか存在しません。

5.14以降、すべての無効な日時が等価であり、すべての有効な日時よりも小さいとみなされます。

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

QDataStream &operator<<(QDataStream &out, const QDateTime &dateTime)

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

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

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

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

異なる時刻表現を使用する 2 つの日時には、UTC からのオフセットが異なる場合があります。この場合、date() とtime() の値が異なっていても、その差が UTC オフセットの差と一致すれば、それらは等価とみなされることがあります。date() とtime() が一致する場合、UTC からのオフセットが大きい方が、オフセットが小さい方よりも小さい(早い)とみなされます。 その結果、日時には弱い順序関係しか存在しません。

5.14以降、すべての無効な日時が等価であり、すべての有効な日時よりも小さいとみなされます。

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

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

lhs がrhs と同じ時点を表す場合、true を返します。そうでない場合は、false を返します。

異なる時刻表現を使用する 2 つの日付時刻は、UTC からのオフセットが異なる場合があります。この場合、date() とtime() の値が異なっていても、その差が UTC オフセットの差と一致すれば、それらは等価であるとみなされることがあります。date() とtime() が一致する場合、UTC からのオフセットが大きい方が、オフセットが小さい方よりも小さい(早い)とみなされます。 その結果、日時には弱い順序関係しか存在しません。

バージョン 5.14 以降、すべての無効な日時が等価であり、かつすべての有効な日時よりも小さいものとみなされます。

operator!=()、operator<()、operator<=()、operator>()、およびoperator>=()も参照してください 。

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

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

異なる時刻表現を使用する 2 つの日時には、UTC からのオフセットが異なる場合があります。この場合、date() とtime() の値が異なっていても、その差が UTC オフセットの差と一致すれば、それらは等価とみなされることがあります。date() とtime() が一致する場合、UTC からのオフセットが大きい方が、オフセットが小さい方よりも小さい(早い)とみなされます。 その結果、日時には弱い順序関係しかありません。

5.14以降、すべての無効な日時が等価であり、すべての有効な日時よりも小さいとみなされます。

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

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

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

異なる時刻表現を使用する 2 つの日時には、UTC からのオフセットが異なる場合があります。この場合、date() とtime() の値が異なっていても、その差が UTC オフセットの差と一致すれば、それらは等価とみなされることがあります。date() とtime() が一致する場合、UTC からのオフセットが大きい方が、オフセットが小さい方よりも小さい(早い)とみなされます。 その結果、日時には弱い順序関係しか存在しません。

5.14以降、すべての無効な日時が等価であり、すべての有効な日時よりも小さいものとみなされます。

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

QDataStream &operator>>(QDataStream &in, QDateTime &dateTime)

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

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