• ベストアンサー

COleDateTime とtime_t

Stiring型の"2011/03/08 12:34:56"から1970年1月1日からの秒数を取得したいです。 COleDateTime とtime_tに使って次のコードを書いてみました。 COleDateTime time1("2011/03/08 12:34:56"); time_t time2; time2=(time_t)time1; 駄目でしょうか? ほかに簡単な方法はないでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

COleDateTimeは内部的には、VARIANT データ型DATE (VT_DATE) になり、 そのデータの持ち方はtime_tのように1970年1月1日からの通算秒数ではありません。 MSDN COleDateTime http://msdn.microsoft.com/ja-jp/library/38wh24td%28v=vs.80%29.aspx COleDateTimeにtime_tにキャストできる演算子がないので正しい結果が得られないでしょう。 CTimeを使うなりmktimeを使うなりしてtime_tに変換してみてはどうでしょうか? COleDateTime t1(2011, 3, 8, 12, 34, 56); SYSTEMTIME st; t1.GetAsSystemTime(st); CTime t2(st); time_t t = t2.GetTime(); ただし、扱える範囲がtime_tとCOleDateTime(DATE)で違うので、範囲外を指定したときを考慮する必要があるかもしれません。 (1970年以前の日付とか)

a--he
質問者

お礼

ありがとうございました。 コードを参考にして作りたいと思います。

その他の回答 (1)

回答No.2

COleTimeDateSpanを使った方法がありました。 COleDateTime t1(2011, 3, 8, 12, 34, 56); time_t t = (time_t)(t1 - COleDateTime((time_t)0)).GetTotalSeconds(); この場合も、GetTotalSecondsの結果がマイナスになるケースを考慮する必要があるかも。 ちなみに何のためにtime_tが必要になりますか?

a--he
質問者

お礼

ありがとうございました。必ずtime_tを使わなければいけないことではありませんでした。

関連するQ&A