2011-08-16 43 views
2

Windowsのレジストリに日付と時刻の値を書き込み、読み込むのに最適なデータ型やフォーマットは何ですか?日付/時刻の値をレジストリに書き込む

MFCでCTimeとCTimeSpanオブジェクトを使用しているC++を使用していますが、CRTライブラリを使用するのも快適です。

時間の値を正しく表現するには、64ビットの整数を使用する必要があります。これは、WinAppEx::WriteInt()のようなMFCメソッドの使用を排除します。

可読性とデバッグ目的のために、私はCTime :: FormatGmt()メソッドを使用してレジストリに文字列を書き込んだ後、読み込んで解析したいと思いますが、strptimeのMSVCランタイム実装が不足しています)は、読み取り時の解析を容易にします。私はstrptime()を実装することができますが、私は軽量ソリューションを望んでいます。

私はまだCOleDateTimeクラスを調べていません。

これは私の最初のStackOverflowの質問です。

+1

重要な情報を除外しました。あなたのアプリケーションのために時間がどれだけ正確に必要ですか?それは本当にあなたが必要とするソリューションを管理します。日、時間、分、秒、ミリ秒? – iandotkelly

+0

分の精度。私は本当に毎秒以上の解像度を必要としません。返信いただきありがとうございます。 –

答えて

3

CTime::GetTimeを使用して、返された64ビット整数をレジストリに格納します。ロードするときは、CTimeコンストラクタに同じ整数を渡します。

また、time functionsの使用を検討することもできます。

+0

それはまさに私がやったことです。ありがとうございました。 –

2

時間またはタイムスパンをシリアル化するとき、私は通常

  1. どのような値私が持っていることはUTCであることを確認してください。
  2. UTCでない場合は、UTCに変換してください。
  3. UTC値をFILETIME値に変換します。
  4. FILETIME値をシリアル化します。

私のために働きます。

+0

ありがとう! CTimeオブジェクトから_time64_t値を作成し、QWORDエントリをレジストリに書き込んでいます。質問を編集してコードを含める必要がありますか?または自分の答えを投稿しますか? –

0

COleDateTimeクラスは倍数に基づいており、整数部分は年/月/日を表し、小数部分は時分/分/秒を表します。

COleDateTimeをdoubleにキャストして、24 * 60で乗算すると、1899-12-30からの分数を表すDWORDが得られます。このDWORDをレジストリに簡単に格納し、後で逆変換をCOleDateTimeに戻すことができます。

+0

ありがとうございます。私は、64ビットの_time64_t型を使用して、それをQWORDとしてレジストリに格納することができました。 2つのDWORD値を書き込むよりもきれいに思えました。 –