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_DATE_TIME_MQH__
8#define __TIME_SHIELD_DATE_TIME_MQH__
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 return DateTime(utc_ms, offset);
38 }
39
43 static DateTime now_utc(const int offset = 0) {
44 return DateTime(ts_ms(), offset);
45 }
46
59 const long year,
60 const int month,
61 const int day,
62 const int hour,
63 const int min,
64 const int sec,
65 const int ms,
66 const int offset,
67 DateTime &out) {
68 if (!is_valid_date_time(year, month, day, hour, min, sec, ms))
69 return false;
70
73 return false;
74
75 const long local_ms = to_timestamp_ms(year, month, day, hour, min, sec, ms);
76 out = DateTime(local_ms - offset_to_ms(offset), offset);
77 return true;
78 }
79
86 const DateTimeStruct &local_dt,
87 const int offset,
88 DateTime &out) {
89 if (!is_valid_date_time(local_dt))
90 return false;
91
94 return false;
95
96 const long local_ms = dt_to_timestamp_ms(local_dt);
97 out = DateTime(local_ms - offset_to_ms(offset), offset);
98 return true;
99 }
100
105 static bool try_parse_iso8601(const string str, DateTime &out) {
108 if (!parse_iso8601(str, dt, tz))
109 return false;
110
113 return true;
114 }
115
117 string to_iso8601() const { return to_iso8601_ms(local_ms(), m_offset); }
118
120 long unix_ms() const { return m_utc_ms; }
121
123 int utc_offset() const { return m_offset; }
124
126 DateTime with_offset(const int new_offset) const { return DateTime(m_utc_ms, new_offset); }
127
129 DateTime to_utc() const { return with_offset(0); }
130
131 private:
132 DateTime(const long utc_ms, const int offset): m_utc_ms(utc_ms), m_offset(offset) {}
133
134 static long offset_to_ms(const int offset) { return (long)offset * MS_PER_SEC; }
135
136 long local_ms() const { return m_utc_ms + offset_to_ms(m_offset); }
137
140 };
141
142} // namespace time_shield
143
144#endif // __TIME_SHIELD_DATE_TIME_MQH__
Represents a moment in time with optional fixed UTC offset.
Definition DateTime.hpp:36
int day() const
Local day component.
Definition DateTime.hpp:308
DateTime()
Default constructor initializes epoch with zero offset.
Definition DateTime.mqh:30
long local_ms() const
Definition DateTime.mqh:136
static long offset_to_ms(const int offset)
Definition DateTime.mqh:134
int utc_offset() const
Access stored UTC offset.
Definition DateTime.mqh:123
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:85
string to_iso8601() const
Format to ISO8601 string with stored offset.
Definition DateTime.mqh:117
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:58
DateTime with_offset(tz_t new_offset) const noexcept
Return copy with new offset preserving instant.
Definition DateTime.hpp:463
int hour() const
Local hour component.
Definition DateTime.hpp:313
static DateTime parse_iso8601(const std::string &str)
Parse ISO8601 string, throws on failure.
Definition DateTime.hpp:196
static DateTime now_utc(const int offset=0)
Construct instance for current UTC time.
Definition DateTime.mqh:43
DateTime() noexcept
Default constructor sets epoch with zero offset.
Definition DateTime.hpp:39
int month() const
Local month component.
Definition DateTime.hpp:303
long unix_ms() const
Access UTC milliseconds.
Definition DateTime.mqh:120
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:298
ts_ms_t local_ms() const noexcept
Definition DateTime.hpp:568
DateTime with_offset(const int new_offset) const
Return copy with new offset preserving instant.
Definition DateTime.mqh:126
static constexpr ts_ms_t offset_to_ms(tz_t offset) noexcept
Definition DateTime.hpp:564
static bool try_parse_iso8601(const string str, DateTime &out)
Try to parse ISO8601 string to DateTime.
Definition DateTime.mqh:105
DateTime to_utc() const
Return copy with zero offset.
Definition DateTime.mqh:129
DateTime(const long utc_ms, const int offset)
Definition DateTime.mqh:132
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.
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.
TIME_SHIELD_CONSTEXPR ts_t dt_to_timestamp_ms(const T &date_time)
Converts a date-time structure to a timestamp in milliseconds.
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 converting them to timestamps.
Header for time zone structure and related functions (MQL5).
Header with validation functions for dates, times, and timestamps.