comparison 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
comparison
equal deleted inserted replaced
8:b1f73678ef61 9:5c0397762b53
1 #include "core/time.h"
2 #include <cassert>
3 #include <cmath>
4 #include <cstdint>
5 #include <ctime>
6 #include <string>
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 } // namespace Time