Formatted includes/services/datetime

This commit is contained in:
Aaron Po
2026-07-19 04:10:32 -04:00
parent 4f0f56d7d7
commit d9b10df436
2 changed files with 51 additions and 51 deletions

View File

@@ -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_

View File

@@ -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_