次の表を見てください。<time.h>あるいは<ctime>でtime_tとtm構造体との変換を行う関数をまとめました。

time_t→tm構造体tm構造体→time_t
現地時刻localtimemktime
UTCgmtime

表の「?」の部分、UTCでtm構造体からtime_tに変換する関数、それがCおよびC++の標準ライブラリにはありません。

仕方ないので、非標準でもいいから何かないかと探しました。どうやら、Unix系の一部にはtimegm、Visual C++には_mkgmtimeという関数があることが分かりました。

Linux glibc, BSD系列, Cygwinなど
timegm関数 (Linux, FreeBSD)
Visual C++
_mkgmtime

このほか、Linuxのmanには、Unix系一般に通用しそうな方法が説明されています。setenvで環境変数TZを設定のうえ、mktimeを呼び出すというやり方です。

なおこれ、std::chrono::system_clock::time_point ←→ std::time_t ←→ std::tm ←→ (std::put_time, std::get_time)というstd::chrono::system_clock::time_pointからの入出力の過程で必要になったので、調べました。

スポンサード リンク

この記事のカテゴリ

  • ⇒ tmからtime_tにUTCで変換する関数を探した
  • ⇒ tmからtime_tにUTCで変換する関数を探した