mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-10-15 10:04:44 +00:00
Formatted includes/services/datetime
This commit is contained in:
@@ -20,49 +20,49 @@
|
|||||||
* directly
|
* directly
|
||||||
*/
|
*/
|
||||||
class IDateTimeProvider {
|
class IDateTimeProvider {
|
||||||
public:
|
public:
|
||||||
virtual ~IDateTimeProvider() = default;
|
virtual ~IDateTimeProvider() = default;
|
||||||
|
|
||||||
IDateTimeProvider() = default;
|
IDateTimeProvider() = default;
|
||||||
IDateTimeProvider(const IDateTimeProvider&) = delete;
|
IDateTimeProvider(const IDateTimeProvider&) = delete;
|
||||||
IDateTimeProvider& operator=(const IDateTimeProvider&) = delete;
|
IDateTimeProvider& operator=(const IDateTimeProvider&) = delete;
|
||||||
IDateTimeProvider(IDateTimeProvider&&) = delete;
|
IDateTimeProvider(IDateTimeProvider&&) = delete;
|
||||||
IDateTimeProvider& operator=(IDateTimeProvider&&) = delete;
|
IDateTimeProvider& operator=(IDateTimeProvider&&) = delete;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Returns the current UTC timestamp in a file-safe format.
|
* @brief Returns the current UTC timestamp in a file-safe format.
|
||||||
*
|
*
|
||||||
* @return UTC timestamp string.
|
* @return UTC timestamp string.
|
||||||
*/
|
*/
|
||||||
virtual std::string GetUtcTimestamp() = 0;
|
virtual std::string GetUtcTimestamp() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Timestamp provider backed by the system clock.
|
* @brief Timestamp provider backed by the system clock.
|
||||||
*/
|
*/
|
||||||
class SystemDateTimeProvider final : public IDateTimeProvider {
|
class SystemDateTimeProvider final : public IDateTimeProvider {
|
||||||
public:
|
public:
|
||||||
std::string GetUtcTimestamp() override {
|
std::string GetUtcTimestamp() override {
|
||||||
constexpr int kFractionalSecondWidth = 6;
|
constexpr int kFractionalSecondWidth = 6;
|
||||||
|
|
||||||
const auto now = std::chrono::system_clock::now();
|
const auto now = std::chrono::system_clock::now();
|
||||||
const auto now_time = std::chrono::system_clock::to_time_t(now);
|
const auto now_time = std::chrono::system_clock::to_time_t(now);
|
||||||
const std::tm* utc_time_ptr = std::gmtime(&now_time);
|
const std::tm* utc_time_ptr = std::gmtime(&now_time);
|
||||||
if (utc_time_ptr == nullptr) {
|
if (utc_time_ptr == nullptr) {
|
||||||
throw std::runtime_error("Failed to format UTC timestamp");
|
throw std::runtime_error("Failed to format UTC timestamp");
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto fractional_seconds =
|
const auto fractional_seconds =
|
||||||
std::chrono::duration_cast<std::chrono::microseconds>(
|
std::chrono::duration_cast<std::chrono::microseconds>(
|
||||||
now.time_since_epoch()) %
|
now.time_since_epoch()) %
|
||||||
std::chrono::seconds(1);
|
std::chrono::seconds(1);
|
||||||
|
|
||||||
std::ostringstream output;
|
std::ostringstream output;
|
||||||
output << std::put_time(utc_time_ptr, "%Y-%m-%dT%H-%M-%S");
|
output << std::put_time(utc_time_ptr, "%Y-%m-%dT%H-%M-%S");
|
||||||
output << '.' << std::setw(kFractionalSecondWidth) << std::setfill('0')
|
output << '.' << std::setw(kFractionalSecondWidth) << std::setfill('0')
|
||||||
<< fractional_seconds.count() << 'Z';
|
<< fractional_seconds.count() << 'Z';
|
||||||
return output.str();
|
return output.str();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BIERGARTEN_PIPELINE_INCLUDES_SERVICES_DATETIME_DATE_TIME_PROVIDER_H_
|
#endif // BIERGARTEN_PIPELINE_INCLUDES_SERVICES_DATETIME_DATE_TIME_PROVIDER_H_
|
||||||
|
|||||||
@@ -8,28 +8,28 @@
|
|||||||
* @brief Simple timer utility for measuring elapsed time.
|
* @brief Simple timer utility for measuring elapsed time.
|
||||||
*/
|
*/
|
||||||
class Timer {
|
class Timer {
|
||||||
std::chrono::steady_clock::time_point start_time =
|
std::chrono::steady_clock::time_point start_time =
|
||||||
std::chrono::steady_clock::now();
|
std::chrono::steady_clock::now();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Timer(const Timer&) = delete;
|
Timer(const Timer&) = delete;
|
||||||
Timer& operator=(const Timer&) = delete;
|
Timer& operator=(const Timer&) = delete;
|
||||||
Timer(Timer&&) = delete;
|
Timer(Timer&&) = delete;
|
||||||
Timer& operator=(Timer&&) = delete;
|
Timer& operator=(Timer&&) = delete;
|
||||||
Timer() = default;
|
Timer() = default;
|
||||||
~Timer() = default;
|
~Timer() = default;
|
||||||
|
|
||||||
[[nodiscard]] int64_t Elapsed() const {
|
[[nodiscard]] int64_t Elapsed() const {
|
||||||
return std::chrono::duration_cast<std::chrono::milliseconds>(
|
return std::chrono::duration_cast<std::chrono::milliseconds>(
|
||||||
std::chrono::steady_clock::now() - start_time)
|
std::chrono::steady_clock::now() - start_time)
|
||||||
.count();
|
.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] int64_t Reset() {
|
[[nodiscard]] int64_t Reset() {
|
||||||
auto previous_elapsed = Elapsed();
|
auto previous_elapsed = Elapsed();
|
||||||
start_time = std::chrono::steady_clock::now();
|
start_time = std::chrono::steady_clock::now();
|
||||||
return previous_elapsed;
|
return previous_elapsed;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // BIERGARTEN_PIPELINE_INCLUDES_SERVICES_DATETIME_TIMER_H_
|
#endif // BIERGARTEN_PIPELINE_INCLUDES_SERVICES_DATETIME_TIMER_H_
|
||||||
|
|||||||
Reference in New Issue
Block a user