13,060
回編集
| 141行目: | 141行目: | ||
qDebug() << QTime(0, 0, 60).isValid(); // false | qDebug() << QTime(0, 0, 60).isValid(); // false | ||
</syntaxhighlight> | |||
<br> | |||
日付の形式が"yyyy/MM/dd"と指定されている場合、該当する形式に適合されているかどうかを確認する。<br> | |||
<syntaxhighlight lang="c++"> | |||
// 確認する日付文字列 | |||
QString dateString = "2023/03/04"; | |||
// 無効な日付の例 | |||
//QString dateString = "2023/02/30"; | |||
// QDate::fromStringメソッドを使用して日付の文字列を解析して、QDateオブジェクトを生成 | |||
// なお、第2引数には、解析する日付の形式を指定する | |||
QDate date = QDate::fromString(dateString, "yyyy/MM/dd"); | |||
// QDate::isValidメソッドを使用して、生成されたQDateオブジェクトが有効かどうかを確認 | |||
if (date.isValid()) qDebug() << dateString << "は有効な日付フォーマットです"; | |||
else qDebug() << dateString << "は無効な日付フォーマットです"; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
また、<code>QDateTime</code>クラスという<code>QDate</code>クラスと<code>QTime</code>クラスの両方を取得するクラスもあるが、<br> | また、<code>QDateTime</code>クラスという<code>QDate</code>クラスと<code>QTime</code>クラスの両方を取得するクラスもあるが、<br> | ||
<u>"日付が正常かつ時刻が異常の場合、時刻を00:00:00にする仕様"</u>のため、(その結果、<code>QDateTime::isValid</code> | <u>"日付が正常かつ時刻が異常の場合、時刻を00:00:00にする仕様"</u>のため、(その結果、<code>QDateTime::isValid</code>メソッドはtrueを返すため)<br> | ||
時刻の有効性が確認できない。<br> | 時刻の有効性が確認できない。<br> | ||
<br><br> | |||
== 日付の比較 == | |||
Qtでは、日時の比較に<code>QDateTime</code>クラスを使用するのが一般的である。<br> | |||
文字列として比較するのではなく、比較する日時文字列を<code>QDateTime</code>クラスに変換して比較することが推奨される。<br> | |||
<br> | |||
以下の例では、現在の日本時間を取得して、"yyyy年M月d日 H時m分"という形式に変換した後、"2024年3月4日 9時5分"と比較している。<br> | |||
<syntaxhighlight lang="c++"> | |||
#include <QDateTime> | |||
#include <QTimeZone> | |||
// 現在の日時を取得して、タイムゾーンを日本に設定 | |||
QDateTime now = QDateTime::currentDateTime(); | |||
now.setTimeZone(QTimeZone("Asia/Tokyo")); | |||
// 日時を指定のフォーマットに変換 | |||
QString formattedNow = now.toString("yyyy年M月d日 H時m分"); | |||
// 比較する日時文字列をQDateTimeオブジェクトに変換 | |||
QDateTime compareDate = QDateTime::fromString("2024年3月4日 9時5分", "yyyy年M月d日 H時m分"); | |||
compareDate.setTimeZone(QTimeZone("Asia/Tokyo")); | |||
// 日時を比較 | |||
if (now > compareDate) qDebug() << "指定の日時より後です"; | |||
else if (now < compareDate) qDebug() << "指定の日時より前です"; | |||
else qDebug() << "指定の日時と同じです"; | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||