Распарсить строку с датой в соотв. с локалью
От: chipmunk  
Дата: 22.06.08 21:49
Оценка:
Привет всем. Ну почему так сложно сделать вроде бы простую вещь
В примере в MSDN с английской локалью вроде всё гуд. Но вот для русской точки в дате уже не проходят
Если их заменить слешами — то всё ок, порядок дата-месяц учитывается как надо. В панели управления в языках и стандартах краткий формат данных задан как dd.MM.yyyy
Как этот пример заставить работать правильно и с датами формата dd.MM.yyyy ?

   locale loc("Russian_Russia");
   basic_stringstream< char > pszGetF, pszPutF, pszGetI, pszPutI;
   ios_base::iostate st = 0;
   struct tm t;
   memset(&t, 0, sizeof(struct tm));

   pszGetF << "22.06.2008";
   pszGetF.imbue( loc );
   basic_istream<char>::_Iter i = use_facet <time_get<char> >(loc).get_date(basic_istream<char>::_Iter(pszGetF.rdbuf() ), basic_istream<char>::_Iter(0), pszGetF, st, &t);

   if ( st & ios_base::failbit )
     cout << "time_get("<< pszGetF.rdbuf( )->str( )<< ") FAILED on char: " << *i << endl;
   else
     cout << "time_get("<< pszGetF.rdbuf( )->str( )<< ") ="
      << "\ntm_sec: " << t.tm_sec
      << "\ntm_min: " << t.tm_min
      << "\ntm_hour: " << t.tm_hour
      << "\ntm_mday: " << t.tm_mday
      << "\ntm_mon: " << t.tm_mon
      << "\ntm_year: " << t.tm_year
      << "\ntm_wday: " << t.tm_wday
      << "\ntm_yday: " << t.tm_yday
      << "\ntm_isdst: " << t.tm_isdst
      << endl;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.