Распарсить строку с датой в соотв. с локалью
От: 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;
Re: Распарсить строку с датой в соотв. с локалью
От: chipmunk  
Дата: 23.06.08 07:05
Оценка:
в MSDN этот пример лежит в описании метода get_date класса time_get
Re: Распарсить строку с датой в соотв. с локалью
От: chipmunk  
Дата: 24.06.08 06:47
Оценка:
похоже спасение только в VarDateFromStr (а хотелось cтандартными средствами)
Re: Распарсить строку с датой в соотв. с локалью
От: Lostar Россия  
Дата: 26.06.08 03:48
Оценка:
Здравствуйте, chipmunk, Вы писали:

C>Привет всем. Ну почему так сложно сделать вроде бы простую вещь

C>В примере в MSDN с английской локалью вроде всё гуд. Но вот для русской точки в дате уже не проходят
C>Если их заменить слешами — то всё ок, порядок дата-месяц учитывается как надо. В панели управления в языках и стандартах краткий формат данных задан как dd.MM.yyyy
C>Как этот пример заставить работать правильно и с датами формата dd.MM.yyyy ?

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

C>   pszGetF << "22.06.2008";
C>   pszGetF.imbue( loc );
C>   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);

C>   if ( st & ios_base::failbit )
C>     cout << "time_get("<< pszGetF.rdbuf( )->str( )<< ") FAILED on char: " << *i << endl;
C>   else
C>     cout << "time_get("<< pszGetF.rdbuf( )->str( )<< ") ="
C>      << "\ntm_sec: " << t.tm_sec
C>      << "\ntm_min: " << t.tm_min
C>      << "\ntm_hour: " << t.tm_hour
C>      << "\ntm_mday: " << t.tm_mday
C>      << "\ntm_mon: " << t.tm_mon
C>      << "\ntm_year: " << t.tm_year
C>      << "\ntm_wday: " << t.tm_wday
C>      << "\ntm_yday: " << t.tm_yday
C>      << "\ntm_isdst: " << t.tm_isdst
C>      << endl;
C>


Boost Date Time не поможет?
http://www.boost.org/doc/libs/1_35_0/doc/html/date_time.html
С уважением, Николай.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.