Mercurial > minori
comparison src/time.cpp @ 2:23d0d9319a00
Update
Also converted everything to LF from CRLF
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Sat, 12 Aug 2023 03:16:26 -0400 |
| parents | |
| children | 1d82f6e04d7d |
comparison
equal
deleted
inserted
replaced
| 1:1ae666fdf9e2 | 2:23d0d9319a00 |
|---|---|
| 1 #include "time_utils.h" | |
| 2 #include <string> | |
| 3 #include <cstdint> | |
| 4 #include <cmath> | |
| 5 #include <ctime> | |
| 6 #include <cassert> | |
| 7 | |
| 8 namespace Time { | |
| 9 | |
| 10 Duration::Duration(int64_t l) { | |
| 11 length = l; | |
| 12 } | |
| 13 | |
| 14 std::string Duration::AsRelativeString() { | |
| 15 std::string result; | |
| 16 | |
| 17 auto get = [](int64_t val, const std::string& s, const std::string& p) { | |
| 18 return std::to_string(val) + " " + (val == 1 ? s : p); | |
| 19 }; | |
| 20 | |
| 21 if (InSeconds() < 60) | |
| 22 result = get(InSeconds(), "second", "seconds"); | |
| 23 else if (InMinutes() < 60) | |
| 24 result = get(InMinutes(), "minute", "minutes"); | |
| 25 else if (InHours() < 24) | |
| 26 result = get(InHours(), "hour", "hours"); | |
| 27 else if (InDays() < 28) | |
| 28 result = get(InDays(), "day", "days"); | |
| 29 else if (InDays() < 365) | |
| 30 result = get(InDays()/30, "month", "months"); | |
| 31 else | |
| 32 result = get(InDays()/365, "year", "years"); | |
| 33 | |
| 34 if (length < 0) | |
| 35 result = "In " + result; | |
| 36 else | |
| 37 result += " ago"; | |
| 38 | |
| 39 return result; | |
| 40 } | |
| 41 | |
| 42 int64_t Duration::InSeconds() { | |
| 43 return length; | |
| 44 } | |
| 45 | |
| 46 int64_t Duration::InMinutes() { | |
| 47 return std::llround((double)length / 60.0); | |
| 48 } | |
| 49 | |
| 50 int64_t Duration::InHours() { | |
| 51 return std::llround((double)length / 3600.0); | |
| 52 } | |
| 53 | |
| 54 int64_t Duration::InDays() { | |
| 55 return std::llround((double)length / 86400.0); | |
| 56 } | |
| 57 | |
| 58 int64_t GetSystemTime() { | |
| 59 assert(sizeof(int64_t) >= sizeof(time_t)); | |
| 60 time_t t = std::time(nullptr); | |
| 61 return *reinterpret_cast<int64_t*>(&t); | |
| 62 } | |
| 63 | |
| 64 } |
