Nix (Dev) 3.5.10
dev - 3.5.10 - 1af9301
Loading...
Searching...
No Matches
Timestamp.hpp
Go to the documentation of this file.
1#ifndef IV_SRC_CORE_TIMESTAMP_HPP_
2#define IV_SRC_CORE_TIMESTAMP_HPP_
3
4#include "core/constants.hpp"
5#include "core/defines.hpp"
6#include "core/enums.hpp"
7#include "core/structs.hpp"
8
9#include <chrono>
10#include <iostream>
11#include <locale>
12
13namespace iv::time
14{
15
17{
18public:
19 Timestamp() : m_timestamp(std::chrono::system_clock::now())
20 {
21 }
22
23 explicit Timestamp(const iv::types::timestamp milliseconds)
24 : m_timestamp(std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds(milliseconds)))
25 {
26 }
27
28 explicit Timestamp(const std::chrono::time_point<std::chrono::system_clock> &timestamp) : m_timestamp(timestamp)
29 {
30 }
31
32 Timestamp(const Timestamp &other) = default;
33
34 Timestamp(Timestamp &&other) noexcept : m_timestamp(other.m_timestamp)
35 {
36 }
37
39 {
40 if (this != &other)
41 {
43 }
44
45 return *this;
46 }
47
48 Timestamp &operator=(Timestamp &&other) noexcept
49 {
50 if (this != &other)
51 {
52 m_timestamp = other.m_timestamp;
53 }
54
55 return *this;
56 }
57
58 bool operator<(const Timestamp &other) const
59 {
60 return m_timestamp < other.m_timestamp;
61 }
62
63 bool operator>(const Timestamp &other) const
64 {
65 return m_timestamp > other.m_timestamp;
66 }
67
68 bool operator<=(const Timestamp &other) const
69 {
70 return m_timestamp <= other.m_timestamp;
71 }
72
73 bool operator>=(const Timestamp &other) const
74 {
75 return m_timestamp >= other.m_timestamp;
76 }
77
78 bool operator==(const Timestamp &other) const
79 {
80 return m_timestamp == other.m_timestamp;
81 }
82
83 bool operator!=(const Timestamp &other) const
84 {
85 return m_timestamp != other.m_timestamp;
86 }
87
88 Timestamp operator+(const std::chrono::seconds &seconds) const
89 {
90 return Timestamp(m_timestamp + seconds);
91 }
92
93 Timestamp operator-(const std::chrono::seconds &seconds) const
94 {
95 return Timestamp(m_timestamp - seconds);
96 }
97
98 Timestamp operator+(const iv::types::timestamp &milliseconds) const
99 {
100 return Timestamp(inMilliseconds() + milliseconds);
101 }
102
103 Timestamp operator-(const iv::types::timestamp &milliseconds) const
104 {
105 return Timestamp(inMilliseconds() - milliseconds);
106 }
107
108 void setTime(const std::chrono::time_point<std::chrono::system_clock> time = std::chrono::system_clock::now())
109 {
110 m_timestamp = time;
111 }
112
113 void setTime(const iv::types::timestamp milliseconds)
114 {
115 m_timestamp = std::chrono::time_point<std::chrono::system_clock>(std::chrono::milliseconds(milliseconds));
116 }
117
118 Timestamp &setLomsTime(uint16_t numDaysSince1984, uint32_t milliseconds);
119 void getLomsTime(uint16_t &numDaysSince1984, uint32_t &milliseconds) const;
120
121 void now()
122 {
123 m_timestamp = std::chrono::system_clock::now();
124 }
125
127 {
129
130 dateTime -= (dateTime % iv::constants::time::MillisecondsInMinutes);
132
133 setTime(dateTime);
134 }
135
137 {
138 return static_cast<iv::types::timestamp>(
139 std::chrono::duration_cast<std::chrono::milliseconds>(m_timestamp.time_since_epoch()).count());
140 }
141
142 [[nodiscard]] int64_t inSeconds() const
143 {
144 return std::chrono::duration_cast<std::chrono::seconds>(m_timestamp.time_since_epoch()).count();
145 }
146
148 {
149 const std::time_t time = std::chrono::system_clock::to_time_t(m_timestamp);
150 std::tm timeInfo {};
151
152 switch (timeZone)
153 {
155 gmtime_r(&time, &timeInfo);
156 break;
157
159 localtime_r(&time, &timeInfo);
160 break;
161
162 default:
163 break;
164 }
165
166 iv::DateTime dt {};
167 dt.year = static_cast<uint16_t>(timeInfo.tm_year + 1900);
168 dt.month = static_cast<uint16_t>(timeInfo.tm_mon + 1);
169 dt.day = static_cast<uint16_t>(timeInfo.tm_mday);
170 dt.hour = static_cast<uint16_t>(timeInfo.tm_hour);
171 dt.minute = static_cast<uint16_t>(timeInfo.tm_min);
172 dt.second = static_cast<uint16_t>(timeInfo.tm_sec);
173
174 return dt;
175 }
176
177private:
178 std::chrono::time_point<std::chrono::system_clock> m_timestamp;
179};
180
181}// namespace iv::time
182
183#endif//IV_SRC_CORE_TIMESTAMP_HPP_
Definition Timestamp.hpp:17
iv::types::milliseconds inMilliseconds() const
Definition Timestamp.hpp:136
bool operator==(const Timestamp &other) const
Definition Timestamp.hpp:78
Timestamp & operator=(Timestamp &&other) noexcept
Definition Timestamp.hpp:48
iv::DateTime getDateTime(const iv::eTimeZone timeZone=iv::eTimeZone::Localtime) const
Definition Timestamp.hpp:147
Timestamp & setLomsTime(uint16_t numDaysSince1984, uint32_t milliseconds)
Definition Timestamp.cpp:8
void now()
Definition Timestamp.hpp:121
void getLomsTime(uint16_t &numDaysSince1984, uint32_t &milliseconds) const
Definition Timestamp.cpp:22
Timestamp()
Definition Timestamp.hpp:19
int64_t inSeconds() const
Definition Timestamp.hpp:142
std::chrono::time_point< std::chrono::system_clock > m_timestamp
Definition Timestamp.hpp:178
Timestamp operator+(const iv::types::timestamp &milliseconds) const
Definition Timestamp.hpp:98
bool operator<(const Timestamp &other) const
Definition Timestamp.hpp:58
bool operator>(const Timestamp &other) const
Definition Timestamp.hpp:63
Timestamp operator+(const std::chrono::seconds &seconds) const
Definition Timestamp.hpp:88
Timestamp(const Timestamp &other)=default
Timestamp & operator=(const Timestamp &other)
Definition Timestamp.hpp:38
Timestamp(const iv::types::timestamp milliseconds)
Definition Timestamp.hpp:23
bool operator!=(const Timestamp &other) const
Definition Timestamp.hpp:83
Timestamp operator-(const std::chrono::seconds &seconds) const
Definition Timestamp.hpp:93
Timestamp operator-(const iv::types::timestamp &milliseconds) const
Definition Timestamp.hpp:103
void setTime(const std::chrono::time_point< std::chrono::system_clock > time=std::chrono::system_clock::now())
Definition Timestamp.hpp:108
void setTime(const iv::types::timestamp milliseconds)
Definition Timestamp.hpp:113
bool operator>=(const Timestamp &other) const
Definition Timestamp.hpp:73
Timestamp(Timestamp &&other) noexcept
Definition Timestamp.hpp:34
void roundToNextMinute()
Definition Timestamp.hpp:126
Timestamp(const std::chrono::time_point< std::chrono::system_clock > &timestamp)
Definition Timestamp.hpp:28
bool operator<=(const Timestamp &other) const
Definition Timestamp.hpp:68
static constexpr iv::types::timestamp MillisecondsInMinutes
Definition constants.hpp:36
Definition GmtZones.hpp:11
uint64_t timestamp
Definition types.hpp:21
uint64_t milliseconds
Definition types.hpp:22
eTimeZone
Definition enums.hpp:177
Definition structs.hpp:15
std::uint16_t year
Definition structs.hpp:16