Mark Brown wrote:
Hi all!

I'm having problems with the time_get facet when parsing dates and times
in some locales such as hi_IN. It works fine in most locales but in a few the
facet sets failbit without extracting anything. Any ideas what might be going
wrong?

AFAICT, the facet seems to be failing on the %Z directive. Apparently,
we've never implemented time zone parsing :( Could you please open an
issue for it?

Martin


Thanks!
-- Mark

This fails on Linux:

#include <stdio.h>
#include <assert.h>
#include <locale.h>
#include <time.h>
#include <locale>
#include <sstream>

int main ()
{
    const char* name = "hi_IN";
    setlocale (LC_ALL, name);

    const int hour = 10;
    const int min = 20;
    const int sec = 30;

    tm tmb;
    memset (&tmb, 0, sizeof tmb);
    tmb.tm_hour = hour;
    tmb.tm_min = min;
    tmb.tm_sec = sec;

    char timestr [80];
    strftime (timestr, sizeof timestr, "%X", &tmb);
    puts (timestr);

    std::locale hindi (name);
    std::istringstream input (timestr);
    const std::time_get<char> &tmget =
std::use_facet<std::time_get<char> >(hindi);
    memset (&tmb, 0, sizeof tmb);

    std::istreambuf_iterator<char> start (input);
    std::istreambuf_iterator<char> end;

    std::ios::iostate state = std::ios::goodbit;
    tmget.get_time (start, end, input, state, &tmb);

    assert (!(state & std::ios::failbit));
    printf ("time is %d:%d:%d\n", tmb.tm_hour, tmb.tm_min, tmb.tm_sec);

    assert (hour == tmb.tm_hour && min == tmb.tm_min && sec == tmb.tm_sec);
}

Reply via email to