プロが教える店舗&オフィスのセキュリティ対策術

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;

駄目でしょうか?
ほかに簡単な方法はないでしょうか。

よろしくお願いします。

A 回答 (2件)

COleDateTimeは内部的には、VARIANT データ型DATE (VT_DATE) になり、


そのデータの持ち方はtime_tのように1970年1月1日からの通算秒数ではありません。
MSDN
COleDateTime
http://msdn.microsoft.com/ja-jp/library/38wh24td …

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年以前の日付とか)
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/03/09 10:57

COleTimeDateSpanを使った方法がありました。



COleDateTime t1(2011, 3, 8, 12, 34, 56);
time_t t = (time_t)(t1 - COleDateTime((time_t)0)).GetTotalSeconds();

この場合も、GetTotalSecondsの結果がマイナスになるケースを考慮する必要があるかも。


ちなみに何のためにtime_tが必要になりますか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/03/09 10:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!