やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Qt Widget の QDateTime で現在日時を出力する

 ついでにQDebugでデバッグ出力もする。

成果物

github.com

f:id:ytyaru:20181125192744p:plain

対象環境

  • Raspbierry pi 3 Model B+
  • Raspbian stretch 2018-06-27
  • Qt 5.7.1

ソースコード

 日付と時刻を同時にフォーマットできず冗長。DateTimeクラスなのに……。dateTime.toString("yyyy-MM-dd HH:mm:ss")としたかった。C#ならそうなんだけどなぁ。

UTC

    QDateTime dateTimeUtc = QDateTime::currentDateTimeUtc();
    qDebug()<<dateTimeUtc.date().toString("yyyy-MM-dd");
    qDebug()<<dateTimeUtc.time().toString("HH:mm:ss");

ローカル時刻

    QDateTime dateTime = QDateTime::currentDateTime();
    qDebug()<<dateTime.date().toString("yyyy-MM-dd");
    qDebug()<<dateTime.time().toString("HH:mm:ss");

解決までに調査したこと

1

#include <stdio.h>
#include <time.h>
int main()
{
     time_t now = time(NULL);
     struct tm *pnow = localtime(&now);
     printf("%2d%2d%2d日",
        pnow->tm_year+1900,
    pnow->tm_mon + 1,
    pnow->tm_mday);
    return 0;
}

 QtWidgetプロジェクトではC言語のヘッダファイルをインクルードできないっぽい。Qt Widget固有の方法を調査せねばならないようだ。

2

QDateTime test_time;
test_time.setTime_t(1433984121);
qDebug()<<test_time.toString("yyyy/MM/dd hh:mm:ss");

 デバッグ出力はこう書くのか。エポックタイムの取得方法が不明。

3

QDateTime dateTime = QDateTime::currentDateTimeUtc();
datestr = dateTime.date().toString("yyyy/MM/dd");
timestr = dateTime.time().toString("hh:mm:ss UTC");

 これだ! が、変数の型宣言がないし、includeもないためエラーになる。以下でincludeを調査。

 あとはQt Creatorのエディタでインテリセンスによりメソッド候補を表示させれば他のメソッドも見つかる。

学んだこと

  • #include
    • <QDebug>
    • <QDateTime>
  • QDateTimeで現在日時を取得する方法
  • QDebugデバッグ出力する方法

所感

 時刻処理は汎用的なものだが、Qtライブラリ固有のコードになってしまう。これは調査や実装に時間がかかりそう。