Armadilloフォーラム

QDateTimeクラスで取得する時刻のタイムゾーンについて

nic-segawa

2016年10月17日 14時01分

お世話になります。

Armadillo-410のシステムクロックから時刻を取得しようとしています。
QtのQDateTimeクラスのQDateTime::currentDateTime()を用いて現在時刻を取得しました。
しかし、取得される時刻がUTCでの時刻となってしまします。

LinuxのコンソールからDateコマンドを実行すると以下の通りとなります。
[root@armadillo440-0 (ttymxc1) ~]# date
Mon Oct 17 13:37:22 JST 2016

タイムゾーンはJSTで設定されているので、JSTのままの時間が取得されてほしいのですが、方法はあるのでしょうか?

よろしくお願い致します。

コメント

at_takashi.sasayama

2016年10月17日 15時03分

笹山です。

> タイムゾーンはJSTで設定されているので、JSTのままの時間が取得されてほしいのですが、方法はあるのでしょうか?

環境変数 TZ が JST-9 に設定されているか確認していただけないでしょうか?
例えば、TZ が JST に設定されていると、date の結果と、QDateTime::currentDateTime() の結果が
異なる現象が発生します。
(date の結果がUTC、QDateTime::currentDateTime()の結果が JST になります)

環境変数 TZ の設定例

[Armadillo]# export TZ=JST-9

笹山様

ご回答ありがとうございます。

TZ=JST-9に設定されていました。
TZ=JST、TG=UTCと設定してもQDateTime::currentDateTime()の結果はUTC時刻のままでした。(dateコマンドの結果は設定どおりに変わります)

何か他の原因は考えられますでしょうか?

よろしくお願い致します。

at_takashi.sasayama

2016年10月17日 15時57分

笹山です。

> TZ=JST、TG=UTCと設定してもQDateTime::currentDateTime()の結果はUTC時刻のままでした。(dateコマンドの結果は設定どおりに変わります)

すいません。先に記載しました、以下は当方の確認ミスでした。
TZ=JST の時は、どちらも UTC で取得されますね。失礼いたしました。

> 例えば、TZ が JST に設定されていると、date の結果と、QDateTime::currentDateTime() の結果が
> 異なる現象が発生します。
> (date の結果がUTC、QDateTime::currentDateTime()の結果が JST になります)

当方のアプリでは以下の様なコードで確認をしていますが、似たような感じでしょうか?

     QDateTime dt = QDateTime::currentDateTime();
     QPushButton hello(dt.toString("yyyy/MM/dd/hh/mm/ss"));
     hello.resize(200, 50);
     hello.show();

また、以下の様にアプリ実行時に環境変数 TZ を直接指定しても JST での取得はできないでしょうか?

[Armadillo]# TZ=JST-9 ./qtapp -qws

笹山様

ご回答ありがとうございます。

> また、以下の様にアプリ実行時に環境変数 TZ を直接指定しても JST での取得はできないでしょうか?
>

> [Armadillo]# TZ=JST-9 ./qtapp -qws
> 

Qt Creator - プロジェクト - Embedded Linux - ビルド - システム環境変数を使用 の中で変数TZをJST-9に設定するように設定しました。
結果、JSTでの時刻が取得できるようになりました。

ありがとうございました。