#pragma once #include #include #include namespace Incart::Common { class TimeObject { private: uint8_t m_hours; // 0 - 23 uint8_t m_minutes; // 0 - 59 uint8_t m_seconds; // 0 - 59 bool m_isDefault; public: TimeObject() : m_hours(0) , m_minutes(0) , m_seconds(0) , m_isDefault(true) { } TimeObject(uint8_t hours_, uint8_t minutes_, uint8_t seconds_) : m_hours(getCorrectHours(hours_)) , m_minutes(getCorrectMinutes(minutes_)) , m_seconds(getCorrectSeconds(seconds_)) , m_isDefault(false) { } public: uint8_t getHours() const { return m_hours; } void setHours(uint8_t hours_) { m_hours = getCorrectHours(hours_); if (m_isDefault) { m_isDefault = false; } } uint8_t getMinutes() const { return m_minutes; } void setMinutes(uint8_t minutes_) { m_minutes = getCorrectMinutes(minutes_); if (m_isDefault) { m_isDefault = false; } } uint8_t getSeconds() const { return m_seconds; } void setSeconds(uint8_t seconds_) { m_seconds = getCorrectSeconds(seconds_); if (m_isDefault) { m_isDefault = false; } } bool isDefault() const { return m_isDefault; } // format: hh:mm:ss static TimeObject fromString(const std::string& timeText_) { if (timeText_.size() != 8) { return TimeObject{}; } std::string hoursText = timeText_.substr(0, 2); std::string minutesText = timeText_.substr(3, 2); std::string secondsText = timeText_.substr(6, 2); uint8_t hours = static_cast(std::stoi(hoursText)); uint8_t minutes = static_cast(std::stoi(minutesText)); uint8_t seconds = static_cast(std::stoi(secondsText)); return TimeObject{hours, minutes, seconds}; } private: static uint8_t getCorrectSeconds(uint8_t seconds_) { return seconds_ > 59 ? 59 : seconds_; } static uint8_t getCorrectMinutes(uint8_t minutes_) { return minutes_ > 59 ? 59 : minutes_; } static uint8_t getCorrectHours(uint8_t hours_) { return hours_ > 23 ? 23 : hours_; } }; } // namespace Incart::Common