これは今、かなりの間私を困惑させてきました。2 つの異なるサーバー間で ISO8601 でエンコードされた時間を送信できるようにする必要がある C++ で記述されたプログラムに取り組んでいます。ここでの主な支持者は Windows のようです。
これまでのところ、strptime()
ネットワークから日付/時刻文字列を簡単に読み取ってtm*
. ただし、ローカライズされたものに正しく変換することになると、私は完全に困惑するtm*
ので、strftime()
. 素朴なアプローチは単純に と の差を取ることですlocaltime(time(0))
がgmtime(time(0))
、これは夏時間が含まれる任意の日付に対して一貫性がありません。
私がこれまでに取ってきたアプローチは、POSIX の日付と時刻の関数のみを使用し、必要に応じて Windows shim を作成することです (strptime()
これまでは完了しており、timegm()
必要に応じて今後も行う可能性があります)。私はそれを続けたいと思っていますが、単純な事実としてtm*
、Windows の構造体には Linux や OSX にあるいくつかのフィールドがありません#if WIN32
。また、これをブーストする必要がないことを本当に望んでいます。