Mercurial > minori
diff src/core/time.cpp @ 9:5c0397762b53
INCOMPLETE: megacommit :)
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Sun, 10 Sep 2023 03:59:16 -0400 |
parents | src/time.cpp@1d82f6e04d7d |
children | fe719c109dbc |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/core/time.cpp Sun Sep 10 03:59:16 2023 -0400 @@ -0,0 +1,64 @@ +#include "core/time.h" +#include <cassert> +#include <cmath> +#include <cstdint> +#include <ctime> +#include <string> + +namespace Time { + +Duration::Duration(int64_t l) { + length = l; +} + +std::string Duration::AsRelativeString() { + std::string result; + + auto get = [](int64_t val, const std::string& s, const std::string& p) { + return std::to_string(val) + " " + (val == 1 ? s : p); + }; + + if (InSeconds() < 60) + result = get(InSeconds(), "second", "seconds"); + else if (InMinutes() < 60) + result = get(InMinutes(), "minute", "minutes"); + else if (InHours() < 24) + result = get(InHours(), "hour", "hours"); + else if (InDays() < 28) + result = get(InDays(), "day", "days"); + else if (InDays() < 365) + result = get(InDays() / 30, "month", "months"); + else + result = get(InDays() / 365, "year", "years"); + + if (length < 0) + result = "In " + result; + else + result += " ago"; + + return result; +} + +int64_t Duration::InSeconds() { + return length; +} + +int64_t Duration::InMinutes() { + return std::llround((double)length / 60.0); +} + +int64_t Duration::InHours() { + return std::llround((double)length / 3600.0); +} + +int64_t Duration::InDays() { + return std::llround((double)length / 86400.0); +} + +int64_t GetSystemTime() { + assert(sizeof(int64_t) >= sizeof(time_t)); + time_t t = std::time(nullptr); + return *reinterpret_cast<int64_t*>(&t); +} + +} // namespace Time \ No newline at end of file