Go to the documentation of this file.
6 #include <SimoxUtility/algorithm/string/string_tools.h>
54 Duration::MilliSecondsDouble(const double milliSeconds)
56 return Duration::MicroSeconds(1'000 * milliSeconds);
72 Duration::Seconds(const std::int64_t seconds)
74 return Duration::MilliSeconds(1'000 * seconds);
84 Duration::toSeconds() const
86 return static_cast<std::int64_t>(toSecondsDouble() + 0.5);
90 Duration::toSecondsDouble() const
92 return toMilliSecondsDouble() / 1'000;
183 std::string unit =
"µs";
185 if (time_count >= 1000)
190 if (time_count >= 1000)
195 if (time_count >= 60)
200 if (time_count >= 60)
205 if (time_count >= 24)
215 std::stringstream ss;
216 ss << std::setprecision(3) << time_count;
217 return ss.str() + unit;
224 const std::int64_t msec =
225 (
static_cast<double>(usec) / 1
'000) + 0.5; // Rounding towards next integer.
226 const time_t time = static_cast<time_t>(static_cast<double>(_microSeconds) / 1'000
'000);
229 localtime_r(&time, &tr);
232 if (strftime(buf, sizeof(buf), format.c_str(), &tr) == 0)
234 return std::string();
237 std::string postformat(buf);
238 postformat = simox::alg::replace_all(postformat, "%msec", std::to_string(msec));
239 postformat = simox::alg::replace_all(postformat, "%usec", std::to_string(usec));
244 Duration::operator+(const Duration& rhs) const
246 return Duration(_microSeconds + rhs._microSeconds);
250 Duration::operator+=(const Duration& rhs)
252 _microSeconds += rhs._microSeconds;
257 Duration::operator-() const
259 return Duration(-_microSeconds);
263 Duration::operator-(const Duration& rhs) const
265 return Duration(_microSeconds - rhs._microSeconds);
269 Duration::operator-=(const Duration& rhs)
271 _microSeconds -= rhs._microSeconds;
276 Duration::operator*(const double rhs) const
279 t._microSeconds = static_cast<std::int64_t>(static_cast<double>(_microSeconds) * rhs + 0.5);
284 Duration::operator*(const int rhs) const
286 return *this * static_cast<double>(rhs);
290 Duration::operator*(const std::int64_t rhs) const
292 return *this * static_cast<double>(rhs);
296 Duration::operator*=(const double rhs)
298 _microSeconds = static_cast<std::int64_t>(static_cast<double>(_microSeconds) * rhs);
303 Duration::operator*=(const int rhs)
305 return *this *= static_cast<double>(rhs);
309 Duration::operator*=(const std::int64_t rhs)
311 return *this *= static_cast<double>(rhs);
315 Duration::operator/(const Duration& rhs) const
317 return static_cast<double>(_microSeconds) / static_cast<double>(rhs._microSeconds);
321 Duration::operator/(const double rhs) const
324 t._microSeconds = static_cast<std::int64_t>(static_cast<double>(_microSeconds) / rhs);
329 Duration::operator/(const int rhs) const
331 return *this / static_cast<double>(rhs);
335 Duration::operator/(const std::int64_t rhs) const
337 return *this / static_cast<double>(rhs);
341 Duration::operator/=(const double rhs)
343 _microSeconds = static_cast<std::int64_t>(static_cast<double>(_microSeconds) / rhs);
348 Duration::operator/=(const int rhs)
350 return *this /= static_cast<double>(rhs);
354 Duration::operator/=(const std::int64_t rhs)
356 return *this /= static_cast<double>(rhs);
360 Duration::operator<(const Duration& rhs) const
362 return _microSeconds < rhs._microSeconds;
366 Duration::operator<=(const Duration& rhs) const
368 return _microSeconds <= rhs._microSeconds;
372 Duration::operator==(const Duration& rhs) const
374 return _microSeconds == rhs._microSeconds;
378 Duration::operator!=(const Duration& rhs) const
380 return _microSeconds != rhs._microSeconds;
384 Duration::operator>=(const Duration& rhs) const
386 return _microSeconds >= rhs._microSeconds;
390 Duration::operator>(const Duration& rhs) const
392 return _microSeconds > rhs._microSeconds;
396 operator<<(std::ostream& out, const Duration& rhs)
398 out << rhs.toDurationString();
402 } // namespace armarx::core::time
std::int64_t toMinutes() const
Returns the amount of minutes.
std::int64_t toDays() const
Returns the amount of days.
double toSecondsDouble() const
Returns the amount of seconds.
double toMilliSecondsDouble() const
Returns the amount of milliseconds.
double toHoursDouble() const
Returns the amount of hours.
bool isPositive() const
Tests whether the duration is positive (value in µs > 0).
static Duration MicroSecondsDouble(double microSeconds)
Constructs a duration in microseconds.
static Duration Hours(std::int64_t hours)
Constructs a duration in hours.
static Duration DaysDouble(double days)
Constructs a duration in days.
static Duration Seconds(std::int64_t seconds)
Constructs a duration in seconds.
static Duration HoursDouble(double hours)
Constructs a duration in hours.
static Duration SecondsDouble(double seconds)
Constructs a duration in seconds.
static Duration Minutes(std::int64_t minutes)
Constructs a duration in minutes.
double toMinutesDouble() const
Returns the amount of minutes.
std::int64_t toHours() const
Returns the amount of hours.
std::int64_t _microSeconds
Current duration in microseconds.
std::string toDurationString() const
String representation of the current duration in minimal/default format.
static Duration MinutesDouble(double minutes)
Constructs a duration in minutes.
std::int64_t toMilliSeconds() const
Returns the amount of milliseconds.
std::int64_t toMicroSeconds() const
Returns the amount of microseconds.
static Duration Days(std::int64_t days)
Constructs a duration in days.
static Duration MicroSeconds(std::int64_t microSeconds)
Constructs a duration in microseconds.
double toDaysDouble() const
Returns the amount of days.
static Duration MilliSeconds(std::int64_t milliSeconds)
Constructs a duration in milliseconds.
double toMicroSecondsDouble() const
Returns the amount of microseconds.
Duration()
Constructs a zero-duration.