- ベストアンサー
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; 駄目でしょうか? ほかに簡単な方法はないでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
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年以前の日付とか)
その他の回答 (1)
- bluecampus
- ベストアンサー率66% (138/209)
COleTimeDateSpanを使った方法がありました。 COleDateTime t1(2011, 3, 8, 12, 34, 56); time_t t = (time_t)(t1 - COleDateTime((time_t)0)).GetTotalSeconds(); この場合も、GetTotalSecondsの結果がマイナスになるケースを考慮する必要があるかも。 ちなみに何のためにtime_tが必要になりますか?
お礼
ありがとうございました。必ずtime_tを使わなければいけないことではありませんでした。
お礼
ありがとうございました。 コードを参考にして作りたいと思います。