Qtをメインに、プログラムやITに関する情報を発信

Qtの戯言

その他

Qtで日付・時刻の有効性チェックをする(QDate、QTime)

投稿日:

うるう年判定なども含めて、入力された日付や時刻が有効かをチェックする方法のメモ。

日付はQDateのコンストラクタに、年・月・日を入れて、isValid()で判定。
時刻はQTimeのコンストラクタに、時・分・秒を入れて、isValid()で判定。

 

日付

// true
qDebug() << QDate(2019, 2, 28).isValid();
// うるう年ではないため、false
qDebug() << QDate(2019, 2, 29).isValid();
// true
qDebug() << QDate(2020, 2, 28).isValid();
// うるう年のため、true
qDebug() << QDate(2020, 2, 29).isValid();
true
false
true
true

 

時刻

// true
qDebug() << QTime(23, 59, 59).isValid();
// true
qDebug() << QTime(0, 0, 0).isValid();
// false
qDebug() << QTime(25, 0, 0).isValid();
// false
qDebug() << QTime(0, 60, 0).isValid();
// false
qDebug() << QTime(0, 0, 60).isValid();
true
true
false
false
false

 

QDateTimeというのもあるけれど・・・

QDateTimeという、QDateとQTimeの両方を受け取るクラスもありますが、こちらは「日付が正常かつ、時刻が異常」の場合に、時刻を00:00:00にする(その結果、QDateTime::isValid()関数はtrueを返す)という仕様のため、時刻の有効性がチェックできません。

// true
qDebug() << QDateTime(QDate(2019, 2, 28), QTime(23, 59, 59)).isValid();
// false
qDebug() << QDateTime(QDate(2019, 2, 29), QTime(0, 0, 0)).isValid();
// 時刻が異常値でもtrue
qDebug() << QDateTime(QDate(2019, 2, 28), QTime(23, 59, 60)).isValid();
// true
qDebug() << QDateTime(QDate(2020, 2, 29), QTime(0, 0, 0)).isValid();
// 時刻が異常値でもtrue
qDebug() << QDateTime(QDate(2020, 2, 29), QTime(-1, 0, 0)).isValid();
true
false
true
true
true

 

-その他
-, ,

Copyright© Qtの戯言 , 2020 All Rights Reserved Powered by STINGER.