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

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == Qtにおいて、<code>QDate</code>クラスまたは<code>QTime</code>クラスを使用して、日付および時刻の有効性を確認する。<br> <br…」)
 
1行目: 1行目:
== 概要 ==
== 概要 ==
Qtにおいて、<code>QDate</code>クラスまたは<code>QTime</code>クラスを使用して、日付および時刻の有効性を確認する。<br>
Qtにおいて、<code>QDate</code>クラスまたは<code>QTime</code>クラスを使用して、日付および時刻の有効性を確認する。<br>
<br><br>
== エポックタイムの取得 ==
エポックタイム (UNIXタイムやPOSIXタイムとも呼ばれる) を取得する場合、<code>QDateTime</code>クラスを使用する。<br>
エポックタイムは、1970年1月1日00:00:00 UTCからの経過秒数を示しており、多くのプログラミング環境で日付と時刻を扱う際の基準である。<br>
<syntaxhighlight lang="c++">
#include <QDateTime>
// 現在の日時を取得
QDateTime now = QDateTime::currentDateTime();
// エポックタイム (UNIXタイム) を秒単位で取得
// toSecsSinceEpochメソッドは、Qt 5.8以降で使用可能
// Qt 5.8以前を使用している場合は、toTime_tメソッドを使用することもできるが、2038年問題に対応していないため注意する必要がある
qint64 epochTime = now.toSecsSinceEpoch();
</syntaxhighlight>
<br><br>
== ISO 8601 ==
ISO 8601では、日付と時刻は"YYYY-MM-DDTHH:MM:SS"で表現される。<br>
例えば、2024年3月15日 0時14分44秒の場合は、"2024-03-15T00:14:44"のように表す。 ("T"は、日付と時刻の区切りを示す)<br>
<br>
ISO 8601は国際標準化機構(ISO)により定められた日付と時刻の表記に関する国際規格であり、主にデータ交換の文脈で利用される。<br>
<br><br>
== その他の時刻形式 ==
==== yyyy/MM/dd HH:mm:ss形式 ====
この形式は特定の国や地域でよく使用されるが、厳密に定義された国際規格が存在するわけではない。<br>
しかし、他のソフトウェアやデータベースシステムで日付と時刻を表現するために使用されることがある。<br>
<br>
以下の例では、yyyy/MM/dd HH:mm:ss形式からHH:mm:ssの部分 (時刻) のみを取得している。<br>
<syntaxhighlight lang="c++">
#include <QDateTime>
#include <QTime>
QString originalDateTimeString = "2024/03/15 00:14:44";
QDateTime dateTime            = QDateTime::fromString(originalDateTimeString, "yyyy/MM/dd HH:mm:ss");
if (dateTime.isValid()) {
    QString timeString = dateTime.time().toString("HH:mm:ss");
    std::cout << QString("Converted Time : %1").arg(timeString).toStdString() << std::endl;
}
else {
    std::cout << QString("Error: Invalid date/time format.").toStdString() << std::endl;
}
</syntaxhighlight>
<br><br>
<br><br>


45行目: 91行目:
時刻の有効性が確認できない。<br>
時刻の有効性が確認できない。<br>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:Qt]]
[[カテゴリ:Qt]]

2024年3月21日 (木) 17:27時点における版

概要

Qtにおいて、QDateクラスまたはQTimeクラスを使用して、日付および時刻の有効性を確認する。


エポックタイムの取得

エポックタイム (UNIXタイムやPOSIXタイムとも呼ばれる) を取得する場合、QDateTimeクラスを使用する。
エポックタイムは、1970年1月1日00:00:00 UTCからの経過秒数を示しており、多くのプログラミング環境で日付と時刻を扱う際の基準である。

 #include <QDateTime>
 
 // 現在の日時を取得
 QDateTime now = QDateTime::currentDateTime();
 
 // エポックタイム (UNIXタイム) を秒単位で取得
 // toSecsSinceEpochメソッドは、Qt 5.8以降で使用可能
 // Qt 5.8以前を使用している場合は、toTime_tメソッドを使用することもできるが、2038年問題に対応していないため注意する必要がある
 qint64 epochTime = now.toSecsSinceEpoch();



ISO 8601

ISO 8601では、日付と時刻は"YYYY-MM-DDTHH:MM:SS"で表現される。
例えば、2024年3月15日 0時14分44秒の場合は、"2024-03-15T00:14:44"のように表す。 ("T"は、日付と時刻の区切りを示す)

ISO 8601は国際標準化機構(ISO)により定められた日付と時刻の表記に関する国際規格であり、主にデータ交換の文脈で利用される。


その他の時刻形式

yyyy/MM/dd HH:mm:ss形式

この形式は特定の国や地域でよく使用されるが、厳密に定義された国際規格が存在するわけではない。
しかし、他のソフトウェアやデータベースシステムで日付と時刻を表現するために使用されることがある。

以下の例では、yyyy/MM/dd HH:mm:ss形式からHH:mm:ssの部分 (時刻) のみを取得している。

 #include <QDateTime>
 #include <QTime>
 
 QString originalDateTimeString = "2024/03/15 00:14:44";
 QDateTime dateTime             = QDateTime::fromString(originalDateTimeString, "yyyy/MM/dd HH:mm:ss");
 
 if (dateTime.isValid()) {
    QString timeString = dateTime.time().toString("HH:mm:ss");
    std::cout << QString("Converted Time : %1").arg(timeString).toStdString() << std::endl;
 }
 else {
    std::cout << QString("Error: Invalid date/time format.").toStdString() << std::endl;
 }



日付および時刻の有効性の確認

以下の例では、閏年の判定等も含めて、入力された日付および時刻の有効性を確認している。

  • 日付
    QDateクラスのコンストラクタに年月日を代入して、isValidメソッドで判定する。
  • 時刻
    QTimeクラスのコンストラクタに時分秒を代入して、isValidメソッドで判定する。


 // 日付
 
 #include <QDate>
 
 qDebug() << QDate(2019, 2, 28).isValid();  // true
 
 qDebug() << QDate(2019, 2, 29).isValid();  // false(閏年ではないため)
 
 qDebug() << QDate(2020, 2, 28).isValid();  // true
 
 qDebug() << QDate(2020, 2, 29).isValid();  // true(閏年のため)


 // 時刻
 
 #include <QTime>
 
 qDebug() << QTime(23, 59, 59).isValid();  // true
 
 qDebug() << QTime(0, 0, 0).isValid();     // true
 
 qDebug() << QTime(25, 0, 0).isValid();    // false
 
 qDebug() << QTime(0, 60, 0).isValid();    // false
 
 qDebug() << QTime(0, 0, 60).isValid();    // false


また、QDateTimeクラスというQDateクラスとQTimeクラスの両方を取得するクラスもあるが、
"日付が正常かつ時刻が異常の場合、時刻を00:00:00にする仕様"のため、(その結果、QDateTime::isValidメソッドはtrueを返す)
時刻の有効性が確認できない。