Как получить SYSTEMTIME из строки?
От: VladEC  
Дата: 21.06.05 13:51
Оценка: +1
Программирую (вынужденно — чужой проект) в среде MSVS 6.0 SP6 + MFC + STL(в данном моменте никак не участвует).

Задача — из диалогового окна (элемент управления Date Time Picker) получить дату в формате SYSTEMTIME.

На моей системе (по непонятным мне причинам) COledateTime вызывает ошибки и исключения и напрочь отказывается работать по документации. Единственный способ поместить в объект класса COleDateTime данные — воспользоваться конструктором не по умолчанию. Любой из набора методов Set... вызывает исключение и нулевой эффект. Возиться с исключением ОЧЕНЬ не хочется — возникает оно где-то глубоко в недрах кода.
Тот же самый объект в том же самом куске кода спокойно работает на большинстве других систем.
Где-то в MSDN видел, что все объекты Ole надо проверять на валидность, но уже потерял ссылку, да и как-то... по документации же все и из примеров выдрано!

В итоге:
1) Сопоставил элементу управления DateTimePicker текстовую переменную и вытаскиваю в нее по IDОК время (успешно — проверял отладкой)
2) Облазил MSDN — функциями API (GetLocale...) получил строку форматирования (dd/MM/yyyy и т.п.), разделители даты-времени и пр.
Нашел функции преобразования SYSTEMTIME в строку по "локальному" формату.
3) Обратное преобразование по формату найти не могу!
4) Я, конечно, могу "руками" разобрать, где в формате системной локали месяц(ММ), дата(dd), год(yyyy) и т.д., вытащить "разделитель времени", сформировать строку форматирования и sscanf'ом каким-нить или методами CString все запихнуть в компоненты SYSTEMTIME, но не может же быть, чтобы такой функции готовой не было, а?!

Неужели, помимо методов класса COleDateTime нет другого легкого способа из строки получить время?

P.S. Операционка WinXP SP2 English Corporate + Russian MUI, часть служб (если есть идеи, почему COle может не работать).

24.06.08 16:38: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.