Записать значение даты / времени в реестр - PullRequest
2 голосов
/ 16 августа 2011

Каков наилучший тип данных и / или формат для записи и чтения значения даты и времени в реестре Windows?

Я использую C ++ с MFC и работаю с объектами CTime и CTimeSpan, но я чувствуютакже удобно использовать библиотеку CRT.

Насколько я понимаю, для правильного представления значения времени следует использовать 64-разрядное целое число.Это исключает использование методов MFC, таких как WinAppEx :: WriteInt () .

. Для удобства чтения и отладки я хотел бы использовать метод CTime :: FormatGmt () для записи строкив реестр, а затем прочитайте и проанализируйте его позже, но отсутствие реализации strptime () во время выполнения MSVC препятствует простому анализу при чтении.Хотя я мог бы реализовать strptime (), я надеюсь на более легкое решение.

Я еще не изучал классы COleDateTime.

Заранее спасибо, это мой первый вопрос StackOverflow.

Ответы [ 3 ]

3 голосов
/ 17 августа 2011

Используйте CTime :: GetTime и сохраните возвращенное 64-разрядное целое число в реестре. При загрузке передайте то же целое число конструктору CTime.

Вы также можете рассмотреть возможность использования функций времени .

2 голосов
/ 16 августа 2011

При сериализации времени или промежутка времени я обычно

  1. Убедитесь, что любое значение, которое я имею, является UTC.
  2. Если не в UTC, то конвертировать в UTC.
  3. Преобразовать значение UTC в значение FILETIME.
  4. Сериализация значения FILETIME.

У меня работает.

0 голосов
/ 16 августа 2011

COleDateTime классы основаны на двойных числах, где целая часть обозначает год / месяц / день, а дробная часть обозначает час / минуту / секунду.

Если вы приведете COleDateTime к двойномуи умножив на 24 * 60 вы получите DWORD, который представляет количество минут с 1899-12-30.Вы можете легко сохранить этот DWORD в реестре, а затем выполнить обратное преобразование обратно в COleDateTime.

...