Showing the changes to Source/Libraries/TimeSeriesPlatformLibrary/Common/Convert.cpp (1 of 7 files). Show all
Unified · Split
| @@ -168,9 +168,9 @@ datetime_t GSF::FromUnixTime(time_t unixSOC, uint16_t milliseconds) · 167 unmodified lines | |||
| 168 | 168 | ||
| 169 | datetime_t GSF::FromTicks(const int64_t ticks) | 169 | datetime_t GSF::FromTicks(const int64_t ticks) |
| 170 | { | 170 | { |
| 171 | static float64_t tickInterval = float64_t(Ticks::PerSecond); | 171 | static float64_t ticksPerSecondF = float64_t(Ticks::PerSecond); |
| 172 | const datetime_t time = from_time_t((ticks - Ticks::UnixBaseOffset) / Ticks::PerSecond); | 172 | const datetime_t time = from_time_t((ticks - Ticks::UnixBaseOffset) / Ticks::PerSecond); |
| 173 | const int64_t pticks = int64_t(ticks % Ticks::PerSecond / tickInterval * DateTimeTicksPerSecond); | 173 | const int64_t pticks = int64_t(ticks % Ticks::PerSecond / ticksPerSecondF * DateTimeTicksPerSecond); |
| 174 | return time + TimeSpan(0, 0, 0, pticks % DateTimeTicksPerSecond); | 174 | return time + TimeSpan(0, 0, 0, pticks % DateTimeTicksPerSecond); |
| 175 | } | 175 | } |
| 176 | 176 | ||
| @@ -182,6 +182,26 @@ int64_t GSF::ToTicks(const datetime_t& time) · 5 unmodified lines | |||
| 182 | int64_t(offset.fractional_seconds() / tickInterval * Ticks::PerSecond); | 182 | int64_t(offset.fractional_seconds() / tickInterval * Ticks::PerSecond); |
| 183 | } | 183 | } |
| 184 | 184 | ||
| 185 | bool GSF::TimestampIsReasonable(const int64_t value, const float64_t lagTime, const float64_t leadTime, const bool utc) | ||
| 186 | { | ||
| 187 | static const float64_t ticksPerSecondF = float64_t(Ticks::PerSecond); | ||
| 188 | |||
| 189 | if (lagTime <= 0) | ||
| 190 | throw runtime_error("lagTime must be greater than zero, but it can be less than one"); | ||
| 191 | |||
| 192 | if (leadTime <= 0) | ||
| 193 | throw runtime_error("leadTime must be greater than zero, but it can be less than one"); | ||
| 194 | |||
| 195 | // Calculate timestamp distance from local system time in seconds | ||
| 196 | const float64_t distance = (ToTicks(utc ? UtcNow() : Now()) - value) / ticksPerSecondF; | ||
| 197 | return distance >= -leadTime && distance <= lagTime; | ||
| 198 | } | ||
| 199 | |||
| 200 | bool GSF::TimestampIsReasonable(const datetime_t& value, const float64_t lagTime, const float64_t leadTime, const bool utc) | ||
| 201 | { | ||
| 202 | return TimestampIsReasonable(ToTicks(value), lagTime, leadTime); | ||
| 203 | } | ||
| 204 | |||
| 185 | uint32_t GSF::TicksToString(char* ptr, uint32_t maxsize, string format, int64_t ticks) | 205 | uint32_t GSF::TicksToString(char* ptr, uint32_t maxsize, string format, int64_t ticks) |
| 186 | { | 206 | { |
| 187 | time_t fromSeconds; | 207 | time_t fromSeconds; |