10#include "QuantityValue.h"
11#include "ReturnValue.h"
15 using Years = std::chrono::duration<BigNumber, std::ratio<31556952>>;
16 using Months = std::chrono::duration<BigNumber, std::ratio<2629746>>;
17 using Weeks = std::chrono::duration<BigNumber, std::ratio<604800>>;
18 using Days = std::chrono::duration<BigNumber, std::ratio<86400>>;
19 using Hours = std::chrono::duration<BigNumber, std::ratio<3600>>;
20 using Minutes = std::chrono::duration<BigNumber, std::ratio<60>>;
21 using Seconds = std::chrono::duration<BigNumber>;
22 using MilliSeconds = std::chrono::duration<BigNumber, std::milli>;
23 using NanoSeconds = std::chrono::duration<BigNumber, std::nano>;
29 template<
intmax_t _Num,
intmax_t _Den>
30 struct is_ratio<std::ratio<_Num, _Den>> : std::true_type { };
35 Timestamp(NanoSeconds _ns) : m_ns_since_unix_epoch(_ns) {}
37 Timestamp() : m_ns_since_unix_epoch(BigNumber::zero()) {}
40 bool isValid()
const {
return m_ns_since_unix_epoch.count() > 0; }
48 QString toRdfLiteral()
const;
51 template<
typename _unit_>
56 template<
typename _unit_>
59 bool operator<(
const Timestamp& _rhs)
const;
60 bool operator<=(
const Timestamp& _rhs)
const;
61 bool operator==(
const Timestamp& _rhs)
const;
62 bool operator!=(
const Timestamp& _rhs)
const;
63 bool operator>(
const Timestamp& _rhs)
const;
64 bool operator>=(
const Timestamp& _rhs)
const;
71 template<
typename _unit_>
76 template<
typename _unit_>
88 template<
typename _unit_>
90 template<
typename _Period_>
93 template<
typename _Rep_,
typename _Period_>
96 template<
typename _unit_>
98 template<
typename _unit_>
100 static Timestamp from(
const QDateTime& _time);
104 static Unit nanoSECUnit();
106 NanoSeconds m_ns_since_unix_epoch;
115 template<
typename _unit_>
116 inline ReturnValue<Timestamp> Timestamp::fromLocal(_unit_ _value)
118 KNOWCORE_RETURN_VALUE_TRY(lte, localToEpoch(std::chrono::duration_cast<NanoSeconds>(_unit_(_value))));
121 template<
typename _Period_>
122 requires details::is_ratio<_Period_>::value
125 return Timestamp(std::chrono::duration_cast<NanoSeconds>(_value));
127 template<
typename _Rep_,
typename _Period_>
128 requires (not std::is_same_v<_Rep_, knowCore::BigNumber> and details::is_ratio<_Period_>::value)
131 return fromEpoch<_Period_>(std::chrono::duration<knowCore::BigNumber, _Period_>(_value.count()));
133 template<
typename _unit_>
138 template<
typename _unit_>
143 template<
typename _unit_>
144 inline ReturnValue<_unit_> Timestamp::toLocal()
const
146 KNOWCORE_RETURN_VALUE_TRY(etl, epochToLocal(m_ns_since_unix_epoch));
147 return std::chrono::duration_cast<_unit_>(etl);
149 template<
typename _unit_>
152 return std::chrono::duration_cast<_unit_>(m_ns_since_unix_epoch);
155 inline bool Timestamp::operator<(
const Timestamp& _rhs)
const
157 return m_ns_since_unix_epoch < _rhs.m_ns_since_unix_epoch;
159 inline bool Timestamp::operator<=(
const Timestamp& _rhs)
const
161 return m_ns_since_unix_epoch <= _rhs.m_ns_since_unix_epoch;
163 inline bool Timestamp::operator==(
const Timestamp& _rhs)
const
165 return m_ns_since_unix_epoch == _rhs.m_ns_since_unix_epoch;
167 inline bool Timestamp::operator!=(
const Timestamp& _rhs)
const
169 return m_ns_since_unix_epoch != _rhs.m_ns_since_unix_epoch;
171 inline bool Timestamp::operator>(
const Timestamp& _rhs)
const
173 return m_ns_since_unix_epoch > _rhs.m_ns_since_unix_epoch;
175 inline bool Timestamp::operator>=(
const Timestamp& _rhs)
const
177 return m_ns_since_unix_epoch >= _rhs.m_ns_since_unix_epoch;
180 inline Timestamp Timestamp::operator+(
const Timestamp& _rhs)
const
182 return Timestamp(m_ns_since_unix_epoch + _rhs.m_ns_since_unix_epoch);
184 inline Timestamp& Timestamp::operator+=(
const Timestamp& _rhs)
186 m_ns_since_unix_epoch = m_ns_since_unix_epoch + _rhs.m_ns_since_unix_epoch;
190 inline Timestamp Timestamp::operator-(
const Timestamp& _rhs)
const
192 return Timestamp(m_ns_since_unix_epoch - _rhs.m_ns_since_unix_epoch);
196 return Timestamp(m_ns_since_unix_epoch * _rhs);
199 template<
typename _unit_>
200 Timestamp Timestamp::add(_unit_ _unit)
const
202 return Timestamp(m_ns_since_unix_epoch + std::chrono::duration_cast<NanoSeconds>(_unit));
205 template<
typename _unit_>
213KNOWCORE_DECLARE_FULL_METATYPE(knowCore, Timestamp)
220#include "Formatter.h"
223 auto const& [s, v, e] = p.toQDateTime();
226 return format_to(ctx.out(),
"{}", v);
228 return format_to(ctx.out(),
"{}ns", p.toEpoch<knowCore::NanoSeconds>().count());
Class that can contains large numeric value.
Definition BigNumber.h:46
Definition QuantityValue.h:21
Definition ReturnValue.h:29
Definition Timestamp.h:33
_unit_ intervalTo(const Timestamp &_time) const
Definition Timestamp.h:206
_unit_ toEpoch() const
Definition Timestamp.h:150
static Timestamp endOfTime()
Definition Timestamp.cpp:113
static ReturnValue< Timestamp > fromEpoch(const QuantityNumber &_quantity)
Definition Timestamp.cpp:71
static Timestamp originOfTime()
Definition Timestamp.cpp:120
Definition Timestamp.h:27