aboutsummaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/Utilities/Util.cpp73
-rw-r--r--src/common/Utilities/Util.h9
2 files changed, 75 insertions, 7 deletions
diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp
index 57281bf4fd9..ceee94a8009 100644
--- a/src/common/Utilities/Util.cpp
+++ b/src/common/Utilities/Util.cpp
@@ -22,6 +22,7 @@
#include "StringFormat.h"
#include <utf8.h>
#include <algorithm>
+#include <iomanip>
#include <sstream>
#include <string>
#include <cctype>
@@ -108,7 +109,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;
@@ -117,15 +118,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 879ec4e0f67..5a51c545859 100644
--- a/src/common/Utilities/Util.h
+++ b/src/common/Utilities/Util.h
@@ -28,6 +28,13 @@
enum LocaleConstant : uint8;
+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:
@@ -63,7 +70,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);