Time Shield Library
C++ library for working with time
Loading...
Searching...
No Matches
DateTime.mqh
Go to the documentation of this file.
1//+------------------------------------------------------------------+
2//| DateTime.mqh |
3//| Time Shield - MQL5 DateTime Type |
4//| Copyright 2025, NewYaroslav |
5//| https://github.com/NewYaroslav/time-shield-cpp |
6//+------------------------------------------------------------------+
7#ifndef TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATETIME_MQH_INCLUDED
8#define TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATETIME_MQH_INCLUDED
9
13
14#property copyright "Copyright 2025, NewYaroslav"
15#property link "https://github.com/NewYaroslav/time-shield-cpp"
16#property strict
17
18#include "time_conversions.mqh"
19#include "time_formatting.mqh"
20#include "time_parser.mqh"
21#include "time_zone_struct.mqh"
22#include "validation.mqh"
23
24namespace time_shield {
25
27 class DateTime {
28 public:
31
36 static DateTime from_unix_ms(const long utc_ms, const int offset = 0) {
37 DateTime result(utc_ms, offset);
38 return result;
39 }
40
44 static DateTime now_utc(const int offset = 0) {
45 DateTime result(ts_ms(), offset);
46 return result;
47 }
48
61 const long year,
62 const int month,
63 const int day,
64 const int hour,
65 const int min,
66 const int sec,
67 const int ms,
68 const int offset,
69 DateTime &out) {
70 if (!is_valid_date_time(year, month, day, hour, min, sec, ms))
71 return false;
72
75 return false;
76
77 const long local_ms = to_timestamp_ms(year, month, day, hour, min, sec, ms);
78 DateTime result(local_ms - offset_to_ms(offset), offset);
79 out = result;
80 return true;
81 }
82
89 const DateTimeStruct &local_dt,
90 const int offset,
91 DateTime &out) {
92 if (!is_valid_date_time(local_dt))
93 return false;
94
97 return false;
98
99 const long local_ms = dt_to_timestamp_ms(local_dt);
100 DateTime result(local_ms - offset_to_ms(offset), offset);
101 out = result;
102 return true;
103 }
104
109 static bool try_parse_iso8601(const string str, DateTime &out) {
112 if (!parse_iso8601(str, dt, tz))
113 return false;
114
115 const int offset = time_zone_struct_to_offset(tz);
116 DateTime result(dt_to_timestamp_ms(dt) - offset_to_ms(offset), offset);
117 out = result;
118 return true;
119 }
120
122 string to_iso8601() const { return to_iso8601_ms(local_ms(), m_offset); }
123
125 long unix_ms() const { return m_utc_ms; }
126
128 int utc_offset() const { return m_offset; }
129
131 DateTime with_offset(const int new_offset) const {
132 DateTime result(m_utc_ms, new_offset);
133 return result;
134 }
135
137 DateTime to_utc() const { return with_offset(0); }
138
139 private:
140 DateTime(const long utc_ms, const int offset): m_utc_ms(utc_ms), m_offset(offset) {}
141
142 static long offset_to_ms(const int offset) { return (long)offset * MS_PER_SEC; }
143
144 long local_ms() const { return m_utc_ms + offset_to_ms(m_offset); }
145
148 };
149
150} // namespace time_shield
151
152#endif // TIME_SHIELD_MQL5_HEADER_TIME_SHIELD_DATETIME_MQH_INCLUDED
Represents a moment in time with optional fixed UTC offset.
Definition DateTime.hpp:37
int day() const
Local day component.
Definition DateTime.hpp:313
DateTime()
Default constructor initializes epoch with zero offset.
Definition DateTime.mqh:30
long local_ms() const
Definition DateTime.mqh:144
static long offset_to_ms(const int offset)
Definition DateTime.mqh:142
int utc_offset() const
Access stored UTC offset.
Definition DateTime.mqh:128
static bool try_from_date_time_struct(const DateTimeStruct &local_dt, const int offset, DateTime &out)
Try to build from DateTimeStruct interpreted in provided offset.
Definition DateTime.mqh:88
string to_iso8601() const
Format to ISO8601 string with stored offset.
Definition DateTime.mqh:122
static bool try_from_components(const long year, const int month, const int day, const int hour, const int min, const int sec, const int ms, const int offset, DateTime &out)
Try to build from calendar components interpreted in provided offset.
Definition DateTime.mqh:60
DateTime with_offset(tz_t new_offset) const noexcept
Return copy with new offset preserving instant.
Definition DateTime.hpp:532
int hour() const
Local hour component.
Definition DateTime.hpp:318
static DateTime parse_iso8601(const std::string &str)
Parse ISO8601 string, throws on failure.
Definition DateTime.hpp:195
static DateTime now_utc(const int offset=0)
Construct instance for current UTC time.
Definition DateTime.mqh:44
DateTime() noexcept
Default constructor sets epoch with zero offset.
Definition DateTime.hpp:40
int month() const
Local month component.
Definition DateTime.hpp:308
long unix_ms() const
Access UTC milliseconds.
Definition DateTime.mqh:125
static DateTime from_unix_ms(const long utc_ms, const int offset=0)
Create instance from UTC milliseconds.
Definition DateTime.mqh:36
year_t year() const
Local year component.
Definition DateTime.hpp:303
ts_ms_t local_ms() const noexcept
Definition DateTime.hpp:704
DateTime with_offset(const int new_offset) const
Return copy with new offset preserving instant.
Definition DateTime.mqh:131
static bool try_parse_iso8601(const string str, DateTime &out)
Try to parse ISO8601 string to DateTime.
Definition DateTime.mqh:109
DateTime to_utc() const
Return copy with zero offset.
Definition DateTime.mqh:137
DateTime(const long utc_ms, const int offset)
Definition DateTime.mqh:140
static TIME_SHIELD_CONSTEXPR ts_ms_t offset_to_ms(tz_t offset) noexcept
Definition DateTime.hpp:700
constexpr int64_t MS_PER_SEC
Milliseconds per second.
Definition constants.hpp:77
const std::string to_iso8601_ms(ts_ms_t ts_ms)
Converts a timestamp in milliseconds to an ISO8601 string.
TIME_SHIELD_CONSTEXPR tz_t time_zone_struct_to_offset(const TimeZoneStruct &tz) noexcept
Convert a TimeZoneStruct to a numeric UTC offset (seconds).
TimeZoneStruct to_time_zone_struct(tz_t offset)
Converts an integer to a TimeZoneStruct.
TIME_SHIELD_CONSTEXPR bool is_valid_time_zone_offset(const T &time_zone) noexcept
Check if the time zone is valid.
TIME_SHIELD_CONSTEXPR ts_ms_t dt_to_timestamp_ms(const T &date_time)
Converts a date-time structure to a timestamp in milliseconds.
const DateTimeStruct create_date_time_struct(int64_t year, int mon=1, int day=1, int hour=0, int min=0, int sec=0, int ms=0)
Creates a DateTimeStruct instance.
TimeZoneStruct create_time_zone_struct(int hour, int min, bool is_positive=true)
Creates a TimeZoneStruct instance.
TIME_SHIELD_CONSTEXPR ts_ms_t to_timestamp_ms(T1 year, T2 month, T2 day, T2 hour=0, T2 min=0, T2 sec=0, T2 ms=0)
Converts a date-time structure to a timestamp in milliseconds.
ts_ms_t ts_ms() noexcept
Get the current UTC timestamp in milliseconds.
TIME_SHIELD_CONSTEXPR bool is_valid_date_time(T1 year, T2 month, T2 day, T2 hour=0, T2 min=0, T2 sec=0, T3 ms=0) noexcept
Checks the correctness of a date and time.
Main namespace for the Time Shield library.
Structure to represent date and time.
Structure to represent time zone information.
Header with helper functions for converting between different time representations in MQL5.
Header with helper functions for formatting timestamps and date-time values in MQL5.
Header with functions for parsing ISO8601 strings and fixed durations.
Header for time zone structure and related functions (MQL5).
Header with validation functions for dates, times, and timestamps.