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 | 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 | 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 | 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 | 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 | 205 | uint32_t GSF::TicksToString(char* ptr, uint32_t maxsize, string format, int64_t ticks) |
| 186 | 206 | { |
| 187 | 207 | time_t fromSeconds; |