ОБход особенности VarDateFromStr
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
ОБход особенности VarDateFromStr - 2007-10-15 21:48:02.643333
|
|
|
mindgen
Сообщений: 12
Оценки: 0
Присоединился: 2007-09-27 09:32:38.196666
|
Проблема в следующем: есть строка вида:"1,2,3" Вызываю VarDateFromStr("1,2,3", 1049,…) // 1049-русская локаль, разделитель даты: '.' - точка Поидее, VarDateFromStr длжна вернуль E_FAIL или что-то вроде того, но ни как S_OK.(По логике S_OK будет, если ввести "1.2.3") Такое поведение, как я считаю, является ошибочным, но в MSDN описана эта ситуация и считается нормальным поведениеи функции. Вопрос: Как быть? Есть какие-нибудь стандартные методы что-бы обойти эту ситуацию и определить, что "1,2,3" - не является датой с учетом локали 1049? P.S. Конечно можно руками парсить строку, но это очень геморно…(
|
|
|
RE: ОБход особенности VarDateFromStr - 2007-10-16 10:08:45.970000
|
|
|
Inspektor
Сообщений: 143
Оценки: 0
Присоединился: 2007-08-31 11:37:20.710000
|
Ну эта функция вообще клёво работает, возвращает S_OK даже если ввести 310 февраля :D. quote:
P.S. Конечно можно руками парсить строку, но это очень геморно…( Другого выхода нет, тем более, что написать цикл можно за 1, максимум 2 минуты! Тупо ищешь запятые и всё! Пример:
bool IsDate(wchar_t* chDate)
{
DATE lDate;
for(int i=0;i<wcslen(chDate)-1;i++)
if(chDate[i]==',')
return false;
if(VarDateFromStr(chDate,1049,VAR_DATEVALUEONLY,&lDate)==S_OK)
return true;
return false;
} Вернёт false, если встретит запятую или VarDateFromStr() вернёт не S_OK. Правда 310 февраля так и останится "корректной" датой. А вообще я бы на твоём месте потратил 20 минут на написание функции, которая абсолютно точно определяет корректная дата или нет.
|
|
|
RE: ОБход особенности VarDateFromStr - 2007-10-16 12:22:16.266666
|
|
|
mindgen
Сообщений: 12
Оценки: 0
Присоединился: 2007-09-27 09:32:38.196666
|
Жаль что нет другого, стандартного, механизма… :( Придется все-таки парсер писать…
|
|
|
|
|