「Qtの基礎 - 日時」の版間の差分

ナビゲーションに移動 検索に移動
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>メソッドはtrueを返す)<br>
<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>


案内メニュー