History

TimeSeriesPlatformLibrary: Added temporal support options to DataPublisher interfaces.

J. Ritchie Carroll committed 7 years ago

Commit 5c5b4061 parent 04505f228 files · +603 −300Browse files

Showing the changes to Source/Libraries/TimeSeriesPlatformLibrary/Common/Convert.cpp (1 of 28 files). Show all

Unified · Split

Source/Libraries/TimeSeriesPlatformLibrary/Common/Convert.cpp+49−17
@@ -40,7 +40,7 @@ using namespace boost::posix_time; · 39 unmodified lines
4040 using namespace boost::gregorian;
4141 using namespace GSF;
4242
43−const DateTime DateTimeEpoch(date(1400, 1, 1), time_duration(0, 0, 0));
43+const datetime_t DateTimeEpoch(date(1400, 1, 1), time_duration(0, 0, 0));
4444 const auto DateTimeTicksPerSecond = time_duration::ticks_per_second();
4545
4646 string PreparseTimestamp(const string& timestamp, time_duration& utcOffset)
@@ -161,24 +161,24 @@ void GSF::ToUnixTime(const int64_t ticks, time_t& unixSOC, uint16_t& millisecond · 114 unmodified lines
161161 milliseconds = static_cast<uint16_t>(ticks / 10000 % 1000);
162162 }
163163
164−DateTime GSF::FromUnixTime(time_t unixSOC, uint16_t milliseconds)
164+datetime_t GSF::FromUnixTime(time_t unixSOC, uint16_t milliseconds)
165165 {
166166 return from_time_t(unixSOC) + boost::posix_time::milliseconds(milliseconds);
167167 }
168168
169−DateTime GSF::FromTicks(const int64_t ticks)
169+datetime_t GSF::FromTicks(const int64_t ticks)
170170 {
171171 static float64_t tickInterval = float64_t(Ticks::PerSecond);
172− const DateTime time = from_time_t((ticks - Ticks::UnixBaseOffset) / Ticks::PerSecond);
172+ const datetime_t time = from_time_t((ticks - Ticks::UnixBaseOffset) / Ticks::PerSecond);
173173 const int64_t pticks = int64_t(ticks % Ticks::PerSecond / tickInterval * DateTimeTicksPerSecond);
174174 return time + time_duration(0, 0, 0, pticks % DateTimeTicksPerSecond);
175175 }
176176
177−int64_t GSF::ToTicks(const DateTime& time)
177+int64_t GSF::ToTicks(const datetime_t& time)
178178 {
179179 static float64_t tickInterval = pow(10.0, time_duration::num_fractional_digits());
180180 const time_duration offset = time - DateTimeEpoch;
181− return Ticks::PtimeBaseOffset + offset.total_seconds() * Ticks::PerSecond +
181+ return Ticks::PTimeBaseOffset + offset.total_seconds() * Ticks::PerSecond +
182182 int64_t(offset.fractional_seconds() / tickInterval * Ticks::PerSecond);
183183 }
184184
@@ -240,9 +240,9 @@ uint32_t GSF::TicksToString(char* ptr, uint32_t maxsize, string format, int64_t · 55 unmodified lines
240240 return strftime(ptr, maxsize, formatStream.str().data(), &timeinfo);
241241 }
242242
243−DateTime GSF::LocalFromUtc(const DateTime& timestamp)
243+datetime_t GSF::LocalFromUtc(const datetime_t& timestamp)
244244 {
245− return boost::date_time::c_local_adjustor<DateTime>::utc_to_local(timestamp);
245+ return boost::date_time::c_local_adjustor<datetime_t>::utc_to_local(timestamp);
246246 }
247247
248248 std::string GSF::ToString(const Guid& value)
@@ -250,7 +250,7 @@ std::string GSF::ToString(const Guid& value) · 1 unmodified line
250250 return boost::uuids::to_string(value);
251251 }
252252
253−std::string GSF::ToString(const DateTime& value, const char* format)
253+std::string GSF::ToString(const datetime_t& value, const char* format)
254254 {
255255 stringstream stream;
256256 time_facet* facet = new time_facet(format);
@@ -309,7 +309,35 @@ bool GSF::ParseBoolean(const string& value) · 52 unmodified lines
309309 return false;
310310 }
311311
312−bool GSF::TryParseDouble(const string& value, float64_t& result)
312+bool GSF::TryParseInt32(const std::string& value, int32_t& result, const int32_t defaultValue)
313+{
314+ try
315+ {
316+ result = stoi(value);
317+ return true;
318+ }
319+ catch (...)
320+ {
321+ result = defaultValue;
322+ return false;
323+ }
324+}
325+
326+bool GSF::TryParseInt64(const std::string& value, int64_t& result, const int64_t defaultValue)
327+{
328+ try
329+ {
330+ result = stoll(value);
331+ return true;
332+ }
333+ catch (...)
334+ {
335+ result = defaultValue;
336+ return false;
337+ }
338+}
339+
340+bool GSF::TryParseDouble(const string& value, float64_t& result, const float64_t defaultValue)
313341 {
314342 try
315343 {
@@ -318,6 +346,7 @@ bool GSF::TryParseDouble(const string& value, float64_t& result) · 2 unmodified lines
318346 }
319347 catch (...)
320348 {
349+ result = defaultValue;
321350 return false;
322351 }
323352 }
@@ -428,8 +457,8 @@ const char* GSF::Coalesce(const char* data, const char* nonEmptyValue) · 104 unmodified lines
428457 return data;
429458 }
430459
431−// Parse a timestamp string, e.g.: 2018-03-14T19:23:11.665-04:00
432−bool GSF::TryParseTimestamp(const char* time, DateTime& timestamp, bool parseAsUTC)
460+// Attempt to parse a timestamp string, e.g.: 2018-03-14T19:23:11.665-04:00
461+bool GSF::TryParseTimestamp(const char* time, datetime_t& timestamp, const datetime_t& defaultValue, bool parseAsUTC)
433462 {
434463 static const locale formats[] = {
435464 locale(locale::classic(), new time_input_facet("%Y-%m-%d %H:%M:%S%F")),
@@ -438,10 +467,12 @@ bool GSF::TryParseTimestamp(const char* time, DateTime& timestamp, bool parseAsU · 2 unmodified lines
438467
439468 static const int32_t formatsCount = sizeof(formats) / sizeof(formats[0]);
440469
470+ time_duration utcOffset{};
471+ const string cleanTimestamp = PreparseTimestamp(time, utcOffset);
472+
441473 for (int32_t i = 0; i < formatsCount; i++)
442474 {
443− time_duration utcOffset{};
444− istringstream stream(PreparseTimestamp(time, utcOffset));
475+ istringstream stream(cleanTimestamp);
445476
446477 stream.imbue(formats[i]);
447478 stream >> timestamp;
@@ -455,14 +486,15 @@ bool GSF::TryParseTimestamp(const char* time, DateTime& timestamp, bool parseAsU · 7 unmodified lines
455486 }
456487 }
457488
489+ timestamp = defaultValue;
458490 return false;
459491 }
460492
461−DateTime GSF::ParseTimestamp(const char* time, bool parseAsUTC)
493+datetime_t GSF::ParseTimestamp(const char* time, bool parseAsUTC)
462494 {
463− DateTime timestamp;
495+ datetime_t timestamp;
464496
465− if (TryParseTimestamp(time, timestamp, parseAsUTC))
497+ if (TryParseTimestamp(time, timestamp, DateTime::MinValue, parseAsUTC))
466498 return timestamp;
467499
468500 throw runtime_error("Failed to parse timestamp \"" + string(time) + "\"");

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t