1 #ifndef LIBFILEZILLA_TIME_HEADER
2 #define LIBFILEZILLA_TIME_HEADER
12 #include "private/windows.hpp"
21 class FZ_PUBLIC_SYMBOL duration;
66 datetime(zone z,
int year,
int month,
int day,
int hour = -1,
int minute = -1,
int second = -1,
int millisecond = -1);
68 explicit datetime(time_t, accuracy a);
74 explicit datetime(std::string_view
const& s, zone z);
75 explicit datetime(std::wstring_view
const& s, zone z);
78 explicit datetime(FILETIME
const& ft, accuracy a);
90 explicit operator
bool()
const {
97 accuracy get_accuracy()
const {
return a_; }
100 static datetime now();
108 bool operator==(datetime
const& op)
const;
109 bool operator!=(datetime
const& op)
const {
return !(*
this == op); }
110 bool operator<(datetime
const& op)
const;
111 bool operator<=(datetime
const& op)
const;
112 bool operator>(datetime
const& op)
const {
return op < *
this; }
124 int compare(datetime
const& op)
const;
140 datetime& operator-=(duration
const& op);
141 datetime operator-(duration
const& op)
const { datetime t(*
this); t -= op;
return t; }
144 friend duration FZ_PUBLIC_SYMBOL operator-(datetime
const& a, datetime
const& b);
153 bool set(zone z,
int year,
int month,
int day,
int hour = -1,
int minute = -1,
int second = -1,
int millisecond = -1);
164 bool set(std::string_view
const& str, zone z);
165 bool set(std::wstring_view
const& str, zone z);
168 bool set(FILETIME
const& ft, accuracy a);
171 bool set(SYSTEMTIME
const& ft, accuracy a, zone z);
174 #if defined(FZ_UNIX) || defined(FZ_MAC)
180 bool set(tm & t, accuracy a, zone z);
189 bool imbue_time(
int hour,
int minute,
int second = -1,
int millisecond = -1);
197 std::string format(std::string
const& format, zone z)
const;
198 std::wstring format(std::wstring
const& format, zone z)
const;
205 static bool verify_format(std::string
const& fmt);
206 static bool verify_format(std::wstring
const& fmt);
212 time_t get_time_t()
const;
218 tm get_tm(zone z)
const;
221 FILETIME get_filetime()
const;
231 std::string get_rfc822()
const;
248 bool set_rfc822(std::string_view
const& str);
249 bool set_rfc822(std::wstring_view
const& str);
252 int FZ_PRIVATE_SYMBOL compare_slow(
datetime const& op)
const;
254 bool FZ_PRIVATE_SYMBOL clamped();
256 enum invalid_t : int64_t {
257 invalid = std::numeric_limits<int64_t>::min()
280 int64_t get_days()
const {
return ms_ / 1000 / 3600 / 24; }
281 int64_t get_hours()
const {
return ms_ / 1000 / 3600; }
282 int64_t get_minutes()
const {
return ms_ / 1000 / 60; }
283 int64_t get_seconds()
const {
return ms_ / 1000; }
284 int64_t get_milliseconds()
const {
return ms_; }
287 static duration from_days(int64_t m) {
288 return duration(m * 1000 * 60 * 60 * 24);
290 static duration from_hours(int64_t m) {
291 return duration(m * 1000 * 60 * 60);
293 static duration from_minutes(int64_t m) {
296 static duration from_seconds(int64_t m) {
299 static duration from_milliseconds(int64_t m) {
318 explicit operator bool()
const {
327 bool operator<(
duration const& op)
const {
return ms_ < op.ms_; }
328 bool operator<=(
duration const& op)
const {
return ms_ <= op.ms_; }
329 bool operator>(
duration const& op)
const {
return ms_ > op.ms_; }
330 bool operator>=(
duration const& op)
const {
return ms_ >= op.ms_; }
335 explicit FZ_PRIVATE_SYMBOL
duration(int64_t ms) : ms_(ms) {}
345 inline duration operator+(duration
const& a, duration
const& b)
347 return duration(a) += b;
356 duration FZ_PUBLIC_SYMBOL operator-(datetime
const& a, datetime
const& b);
388 typedef std::chrono::steady_clock clock_type;
389 static_assert(std::chrono::steady_clock::is_steady,
"Nonconforming stdlib, your steady_clock isn't steady");
397 explicit operator bool()
const {
398 return t_ != clock_type::time_point();
403 t_ += std::chrono::milliseconds(d.get_milliseconds());
409 t_ -= std::chrono::milliseconds(d.get_milliseconds());
414 explicit FZ_PRIVATE_SYMBOL
monotonic_clock(clock_type::time_point
const& t)
418 clock_type::time_point t_;
420 friend duration operator-(monotonic_clock
const& a, monotonic_clock
const& b);
421 friend bool operator==(monotonic_clock
const& a, monotonic_clock
const& b);
422 friend bool operator<(monotonic_clock
const& a, monotonic_clock
const& b);
423 friend bool operator<=(monotonic_clock
const& a, monotonic_clock
const& b);
424 friend bool operator>(monotonic_clock
const& a, monotonic_clock
const& b);
425 friend bool operator>=(monotonic_clock
const& a, monotonic_clock
const& b);
434 return duration::from_milliseconds(std::chrono::duration_cast<std::chrono::milliseconds>(a.t_ - b.t_).count());
int get_milliseconds() const
Get millisecond part of timestamp.
Definition: time.hpp:209
bool operator==(monotonic_clock const &a, monotonic_clock const &b)
Definition: time.hpp:438
bool operator<(monotonic_clock const &a, monotonic_clock const &b)
Definition: time.hpp:444
Represents a point of time in wallclock, tracking the timestamps accuracy/precision.
Definition: time.hpp:40
accuracy
The datetime's accuracy.
Definition: time.hpp:46
A monotonic clock (aka steady clock) is independent from walltime.
Definition: time.hpp:368
bool operator>(monotonic_clock const &a, monotonic_clock const &b)
Definition: time.hpp:456
The namespace used by libfilezilla.
Definition: apply.hpp:16
zone
When importing or exporting a timestamp, zone is used to explicitly specify whether the conversion is...
Definition: time.hpp:58
The duration class represents a time interval in milliseconds.
Definition: time.hpp:271
Sets some global macros and further includes string.hpp.
bool operator<=(monotonic_clock const &a, monotonic_clock const &b)
Definition: time.hpp:450
bool operator>=(monotonic_clock const &a, monotonic_clock const &b)
Definition: time.hpp:462
bool earlier_than(datetime const &op) const
Equivalent to compare(op) < 0.
Definition: time.hpp:127
bool later_than(datetime const &op) const
Equivalent to compare(op) > 0.
Definition: time.hpp:130