Hold time period data. Can print as fancy string, as sql interval and return as given time unit with given precision.
I'm too lazy writing examples, here are some unit tests I use that will show expected output:
FancyStr
CTimePeriodData FromStr = CTimePeriodData("6d49h2m121s");
ASSERT_EQ(FromStr.asFancy(CTimePeriodData::SECONDS), "8 days, 1 hour, 4 minutes and 1 second");
ASSERT_EQ(FromStr.asFancy(CTimePeriodData::MINUTES), "8 days, 1 hour and 4 minutes");
ASSERT_EQ(FromStr.asFancy(CTimePeriodData::HOURS), "8 days and 1 hour");
ASSERT_EQ(FromStr.asFancy(CTimePeriodData::DAYS), "8 days");
CTimePeriodData FromStr2 = CTimePeriodData("9h2m121s");
ASSERT_EQ(FromStr2.asFancy(CTimePeriodData::SECONDS), "9 hours, 4 minutes and 1 second");
ASSERT_EQ(FromStr2.asFancy(CTimePeriodData::MINUTES), "9 hours and 4 minutes");
ASSERT_EQ(FromStr2.asFancy(CTimePeriodData::HOURS), "9 hours");
ASSERT_EQ(FromStr2.asFancy(CTimePeriodData::DAYS), "0 days");
CTimePeriodData FromStr3 = CTimePeriodData("2m0s");
ASSERT_EQ(FromStr3.asFancy(CTimePeriodData::SECONDS), "2 minutes");
ASSERT_EQ(FromStr3.asFancy(CTimePeriodData::MINUTES), "2 minutes");
ASSERT_EQ(FromStr3.asFancy(CTimePeriodData::HOURS), "0 hours");
ASSERT_EQ(FromStr3.asFancy(CTimePeriodData::DAYS), "0 days");
AsUnit
CTimePeriodData FromStr = CTimePeriodData("6d49h2m121s");
ASSERT_EQ(FromStr.asUnit(CTimePeriodData::SECONDS), (8 * 24 * 60 * 60) + (1 * 60 * 60) + (4 * 60) + 1);
ASSERT_EQ(FromStr.asUnit(CTimePeriodData::MINUTES), (8 * 24 * 60) + (1 * 60) + 4);
ASSERT_EQ(FromStr.asUnit(CTimePeriodData::HOURS), (8 * 24) + 1);
ASSERT_EQ(FromStr.asUnit(CTimePeriodData::DAYS), 8);
CTimePeriodData FromStr2 = CTimePeriodData("9h2m121s");
ASSERT_EQ(FromStr2.asUnit(CTimePeriodData::SECONDS), (9 * 60 * 60) + (4 * 60) + 1);
ASSERT_EQ(FromStr2.asUnit(CTimePeriodData::MINUTES), (9 * 60) + 4);
ASSERT_EQ(FromStr2.asUnit(CTimePeriodData::HOURS), 9);
ASSERT_EQ(FromStr2.asUnit(CTimePeriodData::DAYS), 0);
CTimePeriodData FromStr3 = CTimePeriodData("2m0s");
ASSERT_EQ(FromStr3.asUnit(CTimePeriodData::SECONDS), 120);
ASSERT_EQ(FromStr3.asUnit(CTimePeriodData::MINUTES), 2);
ASSERT_EQ(FromStr3.asUnit(CTimePeriodData::HOURS), 0);
ASSERT_EQ(FromStr3.asUnit(CTimePeriodData::DAYS), 0);