次の表を見てください。<time.h>あるいは<ctime>でtime_tとtm構造体との変換を行う関数をまとめました。
time_t→tm構造体 | tm構造体→time_t | |
---|---|---|
現地時刻 | localtime | mktime |
UTC | gmtime | ? |
表の「?」の部分、UTCでtm構造体からtime_tに変換する関数、それがCおよびC++の標準ライブラリにはありません。
仕方ないので、非標準でもいいから何かないかと探しました。どうやら、Unix系の一部にはtimegm、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からの入出力の過程で必要になったので、調べました。
スポンサード リンク |