diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/Utilities/Util.cpp | 73 | ||||
-rw-r--r-- | src/common/Utilities/Util.h | 9 |
2 files changed, 75 insertions, 7 deletions
diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp index ba55e747010..60c702d5dec 100644 --- a/src/common/Utilities/Util.cpp +++ b/src/common/Utilities/Util.cpp @@ -21,6 +21,7 @@ #include "IpAddress.h" #include <utf8.h> #include <algorithm> +#include <iomanip> #include <sstream> #include <string> #include <cctype> @@ -107,7 +108,7 @@ time_t GetLocalHourTimestamp(time_t time, uint8 hour, bool onlyAfterTime) return hourLocal; } -std::string secsToTimeString(uint64 timeInSecs, bool shortText, bool hoursOnly) +std::string secsToTimeString(uint64 timeInSecs, TimeFormat timeFormat, bool hoursOnly) { uint64 secs = timeInSecs % MINUTE; uint64 minutes = timeInSecs % HOUR / MINUTE; @@ -116,15 +117,75 @@ std::string secsToTimeString(uint64 timeInSecs, bool shortText, bool hoursOnly) std::ostringstream ss; if (days) - ss << days << (shortText ? "d" : " Day(s) "); + { + ss << days; + if (timeFormat == TimeFormat::Numeric) + ss << ":"; + else if (timeFormat == TimeFormat::ShortText) + ss << "d"; + else // if (timeFormat == TimeFormat::FullText) + { + if (days == 1) + ss << " Day "; + else + ss << " Days "; + } + } if (hours || hoursOnly) - ss << hours << (shortText ? "h" : " Hour(s) "); + { + ss << hours; + if (timeFormat == TimeFormat::Numeric) + ss << ":"; + else if (timeFormat == TimeFormat::ShortText) + ss << "h"; + else // if (timeFormat == TimeFormat::FullText) + { + if (hours <= 1) + ss << " Hour "; + else + ss << " Hours "; + } + } if (!hoursOnly) { if (minutes) - ss << minutes << (shortText ? "m" : " Minute(s) "); - if (secs || (!days && !hours && !minutes) ) - ss << secs << (shortText ? "s" : " Second(s)."); + { + ss << minutes; + if (timeFormat == TimeFormat::Numeric) + ss << ":"; + else if (timeFormat == TimeFormat::ShortText) + ss << "m"; + else // if (timeFormat == TimeFormat::FullText) + { + if (minutes == 1) + ss << " Minute "; + else + ss << " Minutes "; + } + } + else + { + if (timeFormat == TimeFormat::Numeric) + ss << "0:"; + } + if (secs || (!days && !hours && !minutes)) + { + ss << std::setw(2) << std::setfill('0') << secs; + if (timeFormat == TimeFormat::ShortText) + ss << "s"; + else if (timeFormat == TimeFormat::FullText) + { + if (secs <= 1) + ss << " Second."; + else + ss << " Seconds."; + } + } + else + { + if (timeFormat == TimeFormat::Numeric) + ss << "00"; + } } return ss.str(); diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h index 518608a6431..4915df56477 100644 --- a/src/common/Utilities/Util.h +++ b/src/common/Utilities/Util.h @@ -26,6 +26,13 @@ #include <utility> #include <vector> +enum class TimeFormat : uint8 +{ + FullText, // 1 Days 2 Hours 3 Minutes 4 Seconds + ShortText, // 1d 2h 3m 4s + Numeric // 1:2:3:4 +}; + class TC_COMMON_API Tokenizer { public: @@ -61,7 +68,7 @@ TC_COMMON_API time_t LocalTimeToUTCTime(time_t time); TC_COMMON_API time_t GetLocalHourTimestamp(time_t time, uint8 hour, bool onlyAfterTime = true); TC_COMMON_API tm TimeBreakdown(time_t t); -TC_COMMON_API std::string secsToTimeString(uint64 timeInSecs, bool shortText = false, bool hoursOnly = false); +TC_COMMON_API std::string secsToTimeString(uint64 timeInSecs, TimeFormat timeFormat = TimeFormat::FullText, bool hoursOnly = false); TC_COMMON_API uint32 TimeStringToSecs(std::string const& timestring); TC_COMMON_API std::string TimeToTimestampStr(time_t t); TC_COMMON_API std::string TimeToHumanReadable(time_t t); |