void convert(Date& date, const std::string& s) { if (s.size() < 10 || s.at(4) != '-' || s.at(7) != '-') { throw ConversionError("Illegal date format"); } const char* d = s.data(); date = Date(getNumber4(d), getNumber2(d + 5), getNumber2(d + 8)); }
Date Date::fromIso(const std::string& s) { Date ret; const char* d = s.data(); try { if (s.size() < 10 || d[4] != '-' || d[7] != '-') throw TypeError(); ret.set(getNumber4(d), getNumber2(d + 5), getNumber2(d + 8)); } catch (const TypeError&) { throw TypeError("failed to convert string \"" + s + "\" into date"); } return ret; }