Fix parsing <MONTH> <DAY> time defs (e.g. "december 25").

Fixes #4040
This commit is contained in:
Gunnar Beutner 2013-05-03 12:31:11 +02:00
parent 3457e2d476
commit 1e9dcb35b4
1 changed files with 9 additions and 2 deletions

View File

@ -159,11 +159,17 @@ void LegacyTimePeriod::ParseTimeSpec(const String& timespec, tm *begin, tm *end,
std::vector<String> tokens;
boost::algorithm::split(tokens, timespec, boost::is_any_of(" "));
if (tokens.size() > 1 && tokens[0] == "day") {
int mon;
if (tokens.size() > 1 && (tokens[0] == "day" || (mon = MonthFromString(tokens[0])) != -1)) {
if (mon == -1)
mon = reference->tm_mon;
int mday = Convert::ToLong(tokens[1]);
if (begin) {
*begin = *reference;
begin->tm_mon = mon;
begin->tm_mday = mday;
begin->tm_hour = 0;
begin->tm_min = 0;
@ -178,6 +184,7 @@ void LegacyTimePeriod::ParseTimeSpec(const String& timespec, tm *begin, tm *end,
if (end) {
*end = *reference;
end->tm_mon = mon;
end->tm_mday = mday;
end->tm_hour = 24;
end->tm_min = 0;
@ -199,7 +206,7 @@ void LegacyTimePeriod::ParseTimeSpec(const String& timespec, tm *begin, tm *end,
tm myref = *reference;
if (tokens.size() > 2) {
int mon = MonthFromString(tokens[2]);
mon = MonthFromString(tokens[2]);
if (mon == -1)
BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid month in time specification: " + timespec));