return IsInTimeRange(&begin, &end, stride, reference);
}
-Dictionary::Ptr LegacyTimePeriod::ProcessTimeRange(const String& timerange, tm *reference)
+void LegacyTimePeriod::ProcessTimeRangeRaw(const String& timerange, tm *reference, tm *begin, tm *end)
{
std::vector<String> times;
if (hd2.size() != 2)
BOOST_THROW_EXCEPTION(std::invalid_argument("Invalid time specification: " + times[1]));
- tm begin, end;
-
- begin = *reference;
- begin.tm_sec = 0;
- begin.tm_min = Convert::ToLong(hd1[1]);
- begin.tm_hour = Convert::ToLong(hd1[0]);
+ *begin = *reference;
+ begin->tm_sec = 0;
+ begin->tm_min = Convert::ToLong(hd1[1]);
+ begin->tm_hour = Convert::ToLong(hd1[0]);
- end = *reference;
- end.tm_sec = 0;
- end.tm_min = Convert::ToLong(hd2[1]);
- end.tm_hour = Convert::ToLong(hd2[0]);
+ *end = *reference;
+ end->tm_sec = 0;
+ end->tm_min = Convert::ToLong(hd2[1]);
+ end->tm_hour = Convert::ToLong(hd2[0]);
+}
+Dictionary::Ptr LegacyTimePeriod::ProcessTimeRange(const String& timestamp, tm *reference)
+{
+ tm begin, end;
+ ProcessTimeRangeRaw(timestamp, reference, &begin, &end);
Dictionary::Ptr segment = boost::make_shared<Dictionary>();
segment->Set("begin", (long)mktime(&begin));
segment->Set("end", (long)mktime(&end));
-
return segment;
}
static void ParseTimeSpec(const String& timespec, tm *begin, tm *end, tm *reference);
static void ParseTimeRange(const String& timerange, tm *begin, tm *end, int *stride, tm *reference);
static bool IsInDayDefinition(const String& daydef, tm *reference);
+ static void ProcessTimeRangeRaw(const String& timerange, tm *reference, tm *begin, tm *end);
static Dictionary::Ptr ProcessTimeRange(const String& timerange, tm *reference);
static void ProcessTimeRanges(const String& timeranges, tm *reference, const Array::Ptr& result);
#endif /* _MSC_VER */
tm begin, end;
- int stride;
-
- LegacyTimePeriod::ParseTimeRange(key, &begin, &end, &stride, &reference);
-
- if (stride != 1)
- continue;
+ LegacyTimePeriod::ProcessTimeRangeRaw(value, &reference, &begin, &end);
DbQuery query;
query.Table = GetType()->GetTable() + "_timeranges";
query.Fields->Set("instance_id", 0); /* DbConnection class fills in real ID */
query.Fields->Set("timeperiod_id", DbValue::FromObjectInsertID(tp));
query.Fields->Set("day", wday);
- query.Fields->Set("start_sec", mktime(&begin));
- query.Fields->Set("end_sec", mktime(&end));
+ query.Fields->Set("start_sec", begin.tm_hour * 3600 + begin.tm_min * 60 + begin.tm_sec);
+ query.Fields->Set("end_sec", end.tm_hour * 3600 + end.tm_min * 60 + end.tm_sec);
OnQuery(query);
}
}