Time Shield Library
C++ library for working with time
Loading...
Searching...
No Matches
time_zone_conversions.mqh
Go to the documentation of this file.
1//+------------------------------------------------------------------+
2//| time_zone_conversions.mqh |
3//| Time Shield - MQL5 Time Zone Conversions |
4//| Copyright 2025, NewYaroslav |
5//| https://github.com/NewYaroslav/time-shield-cpp |
6//+------------------------------------------------------------------+
7#ifndef __TIME_SHIELD_TIME_ZONE_CONVERSIONS_MQH__
8#define __TIME_SHIELD_TIME_ZONE_CONVERSIONS_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
20
21namespace time_shield {
22
27 datetime cet_to_gmt(const datetime cet) {
29 int max_days = num_days_in_month(dt.year, dt.mon);
30 const int OLD_START_SUMMER_HOUR = 2;
31 const int OLD_STOP_SUMMER_HOUR = 3;
32 const int NEW_SUMMER_HOUR = 1;
33
34 if(dt.year < 2002) {
35 if(dt.mon > MAR && dt.mon < OCT)
36 return cet - (datetime)SEC_PER_HOUR * 2;
37 else
38 if(dt.mon == MAR) {
39 for(int d = max_days; d >= dt.day; d--) {
40 if(day_of_week_date(dt.year, MAR, d) == SUN) {
41 if(d == dt.day) {
42 if(dt.hour >= OLD_START_SUMMER_HOUR)
43 return cet - (datetime)SEC_PER_HOUR * 2;
44 return cet - (datetime)SEC_PER_HOUR;
45 }
46 return cet - (datetime)SEC_PER_HOUR;
47 }
48 }
49 return cet - (datetime)SEC_PER_HOUR * 2;
50 } else
51 if(dt.mon == OCT) {
52 for(int d = max_days; d >= dt.day; d--) {
53 if(day_of_week_date(dt.year, OCT, d) == SUN) {
54 if(d == dt.day) {
55 if(dt.hour >= OLD_STOP_SUMMER_HOUR)
56 return cet - (datetime)SEC_PER_HOUR;
57 return cet - (datetime)SEC_PER_HOUR;
58 }
59 return cet - (datetime)SEC_PER_HOUR * 2;
60 }
61 }
62 return cet - (datetime)SEC_PER_HOUR;
63 }
64 return cet - (datetime)SEC_PER_HOUR;
65 } else {
66 if(dt.mon > MAR && dt.mon < OCT)
67 return cet - (datetime)SEC_PER_HOUR * 2;
68 else
69 if(dt.mon == MAR) {
70 for(int d = max_days; d >= dt.day; d--) {
71 if(day_of_week_date(dt.year, MAR, d) == SUN) {
72 if(d == dt.day) {
73 if(dt.hour >= (NEW_SUMMER_HOUR + 2))
74 return cet - (datetime)SEC_PER_HOUR * 2;
75 return cet - (datetime)SEC_PER_HOUR;
76 }
77 return cet - (datetime)SEC_PER_HOUR;
78 }
79 }
80 return cet - (datetime)SEC_PER_HOUR * 2;
81 } else
82 if(dt.mon == OCT) {
83 for(int d = max_days; d >= dt.day; d--) {
84 if(day_of_week_date(dt.year, OCT, d) == SUN) {
85 if(d == dt.day) {
86 if(dt.hour >= (NEW_SUMMER_HOUR + 1))
87 return cet - (datetime)SEC_PER_HOUR;
88 return cet - (datetime)SEC_PER_HOUR * 2;
89 }
90 return cet - (datetime)SEC_PER_HOUR * 2;
91 }
92 }
93 return cet - (datetime)SEC_PER_HOUR;
94 }
95 return cet - (datetime)SEC_PER_HOUR;
96 }
97 return cet - (datetime)SEC_PER_HOUR;
98 }
99
104 datetime eet_to_gmt(const datetime eet) {
105 return cet_to_gmt(eet - SEC_PER_HOUR);
106 }
107
108}; // namespace time_shield
109
110#endif // __TIME_SHIELD_TIME_ZONE_CONVERSIONS_MQH__
constexpr int64_t SEC_PER_HOUR
Seconds per hour.
Definition constants.hpp:69
const ts_t eet_to_gmt(ts_t eet)
Convert Eastern European Time to Greenwich Mean Time.
const ts_t cet_to_gmt(ts_t cet)
Convert Central European Time to Greenwich Mean Time.
constexpr const T1 num_days_in_month(ts_t ts=time_shield::ts()) noexcept
Alias for num_days_in_month_ts function.
constexpr const T1 day_of_week_date(T2 year, T3 month, T4 day)
Get the day of the week.
T1 to_date_time(T2 ts)
Converts a timestamp to a date-time structure.
@ OCT
October.
Definition enums.hpp:102
@ MAR
March.
Definition enums.hpp:95
@ SUN
Sunday.
Definition enums.hpp:27
Main namespace for the Time Shield library.
Structure to represent date and time.
int hour
Hour component of time (0-23)
int64_t year
Year component of the date.
int day
Day component of the date (1-31).
int mon
Month component of the date (1-12).
Header with helper functions for converting between different time representations in MQL5.