diff options
author | ForesterDev <11771800+ForesterDev@users.noreply.github.com> | 2020-02-28 22:24:33 +0400 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-12-22 14:55:23 +0100 |
commit | 8c6974bc9f1de4b5fc1e1002d5797dcff62b3cc8 (patch) | |
tree | 1d591c677214542fb8ea0234ebef530ce9af90a4 /src | |
parent | 5e178b30fab3506ee028554c116785a55e26a740 (diff) |
Core/Server: improve timestamp format output for large time values (#24193)
(cherry picked from commit 71a01c75caa767c3323e295a596fe430dc8c7fb2)
Diffstat (limited to 'src')
-rw-r--r-- | src/common/Utilities/Util.cpp | 108 |
1 files changed, 63 insertions, 45 deletions
diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp index ceee94a8009..9322cad14ac 100644 --- a/src/common/Utilities/Util.cpp +++ b/src/common/Utilities/Util.cpp @@ -116,35 +116,54 @@ std::string secsToTimeString(uint64 timeInSecs, TimeFormat timeFormat, bool hour uint64 hours = timeInSecs % DAY / HOUR; uint64 days = timeInSecs / DAY; + if (timeFormat == TimeFormat::Numeric) + { + if (days) + return Trinity::StringFormat("%u:%02u:%02u:%02u", days, hours, minutes, secs); + else if (hours) + return Trinity::StringFormat("%u:%02u:%02u", hours, minutes, secs); + else if (minutes) + return Trinity::StringFormat("%u:%02u", minutes, secs); + else + return Trinity::StringFormat("0:%02u", secs); + } + std::ostringstream ss; if (days) { ss << days; - if (timeFormat == TimeFormat::Numeric) - ss << ":"; - else if (timeFormat == TimeFormat::ShortText) - ss << "d"; - else // if (timeFormat == TimeFormat::FullText) + switch (timeFormat) { - if (days == 1) - ss << " Day "; - else - ss << " Days "; + case TimeFormat::ShortText: + ss << "d"; + break; + case TimeFormat::FullText: + if (days == 1) + ss << " Day "; + else + ss << " Days "; + break; + default: + return "<Unknown time format>"; } } + if (hours || hoursOnly) { ss << hours; - if (timeFormat == TimeFormat::Numeric) - ss << ":"; - else if (timeFormat == TimeFormat::ShortText) - ss << "h"; - else // if (timeFormat == TimeFormat::FullText) + switch (timeFormat) { - if (hours <= 1) - ss << " Hour "; - else - ss << " Hours "; + case TimeFormat::ShortText: + ss << "h"; + break; + case TimeFormat::FullText: + if (hours <= 1) + ss << " Hour "; + else + ss << " Hours "; + break; + default: + return "<Unknown time format>"; } } if (!hoursOnly) @@ -152,41 +171,40 @@ std::string secsToTimeString(uint64 timeInSecs, TimeFormat timeFormat, bool hour if (minutes) { ss << minutes; - if (timeFormat == TimeFormat::Numeric) - ss << ":"; - else if (timeFormat == TimeFormat::ShortText) - ss << "m"; - else // if (timeFormat == TimeFormat::FullText) + switch (timeFormat) { - if (minutes == 1) - ss << " Minute "; - else - ss << " Minutes "; + case TimeFormat::ShortText: + ss << "m"; + break; + case TimeFormat::FullText: + if (minutes == 1) + ss << " Minute "; + else + ss << " Minutes "; + break; + default: + return "<Unknown time format>"; } } - 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) + ss << secs; + switch (timeFormat) { - if (secs <= 1) - ss << " Second."; - else - ss << " Seconds."; + case TimeFormat::ShortText: + ss << "s"; + break; + case TimeFormat::FullText: + if (secs <= 1) + ss << " Second."; + else + ss << " Seconds."; + break; + default: + return "<Unknown time format>"; } } - else - { - if (timeFormat == TimeFormat::Numeric) - ss << "00"; - } } return ss.str(); |