const char* date содержащий текстовое представление (НЕ в текущей locale!) DateTime: "Mon Nov 14 09:25:44 2022"
(в таком виде например отдаёт std::ctime() https://en.cppreference.com/w/cpp/chrono/c/ctime )
Code: Select all
wxDateTime dt;
wxString token = "%a %b %d %H:%M:%S %Y"; //or just "%c" https://en.cppreference.com/w/cpp/chrono/c/strftime#Format_string
wxString dateStr = wxString(date);
wxString::const_iterator end;
if (!dt.ParseFormat(dateStr, token, wxDefaultDateTime, &end))
{
//parsing failed
return false;
}
else if (end == dateStr.end())
{
//entire string parsed
dt.IsValid() ? wxLogDebug(dt.Format()) : wxEmptyString;
}
else
{
//left over
wxLogDebug(wxString(end, dateStr.end()));
}
если локаль в приложении не соответствует представлению в строке dateStr "день недели" и "месяц", например "Mon Nov ..." при локали "ru" парсинг неудачен.
В src/common/datetimefmt.cpp
есть такое:
Code: Select all
enum
{
DateLang_English = 1,
DateLang_Local = 2
};
Вопрос: locale independent парсинг возможен (можно распарсить "день недели" и "месяц" руками самому, вопрос не в этом), без кривых UB костылей, тем более с multithread приложением, вроде временного setlocale() внутри метода, с возвратом предыдущего значения, и без сторонних библиотек?
P.S. У MS есть такое: https://learn.microsoft.com/en-us/windo ... atefromstr но нужно портабельное решение.
WX 3.1.7
MSVC 2019