forked from rosh/MQL5Book
92 lines
2.6 KiB
MQL5
92 lines
2.6 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| DateTime.mqh |
| |
//| Copyright (c) 2019-2021, Marketeer |
| |
//| https://www.mql5.com/en/users/marketeer |
| |
//+------------------------------------------------------------------+
| |
| |
//+------------------------------------------------------------------+
| |
//| Date and Time field extractor |
| |
//+------------------------------------------------------------------+
| |
class DateTime
| |
{
| |
private:
| |
MqlDateTime mdtstruct;
| |
datetime origin;
| |
| |
DateTime() : origin(0)
| |
{
| |
TimeToStruct(0, mdtstruct);
| |
}
| |
| |
void convert(const datetime &dt)
| |
{
| |
if(origin != dt)
| |
{
| |
origin = dt;
| |
TimeToStruct(dt, mdtstruct);
| |
}
| |
}
| |
| |
public:
| |
static DateTime *assign(const datetime dt)
| |
{
| |
_DateTime.convert(dt);
| |
return &_DateTime;
| |
}
| |
ENUM_DAY_OF_WEEK timeDayOfWeek() const
| |
{
| |
return (ENUM_DAY_OF_WEEK)mdtstruct.day_of_week;
| |
}
| |
int timeDayOfYear() const
| |
{
| |
return mdtstruct.day_of_year;
| |
}
| |
int timeYear() const
| |
{
| |
return mdtstruct.year;
| |
}
| |
int timeMonth() const
| |
{
| |
return mdtstruct.mon;
| |
}
| |
int timeDay() const
| |
{
| |
return mdtstruct.day;
| |
}
| |
int timeHour() const
| |
{
| |
return mdtstruct.hour;
| |
}
| |
int timeMinute() const
| |
{
| |
return mdtstruct.min;
| |
}
| |
int timeSeconds() const
| |
{
| |
return mdtstruct.sec;
| |
}
| |
| |
static DateTime _DateTime;
| |
};
| |
| |
static DateTime DateTime::_DateTime;
| |
| |
#define TimeDayOfWeek(T) DateTime::assign(T).timeDayOfWeek()
| |
#define TimeDayOfYear(T) DateTime::assign(T).timeDayOfYear()
| |
#define TimeYear(T) DateTime::assign(T).timeYear()
| |
#define TimeMonth(T) DateTime::assign(T).timeMonth()
| |
#define TimeDay(T) DateTime::assign(T).timeDay()
| |
#define TimeHour(T) DateTime::assign(T).timeHour()
| |
#define TimeMinute(T) DateTime::assign(T).timeMinute()
| |
#define TimeSeconds(T) DateTime::assign(T).timeSeconds()
| |
| |
#define _TimeDayOfWeek DateTime::_DateTime.timeDayOfWeek
| |
#define _TimeDayOfYear DateTime::_DateTime.timeDayOfYear
| |
#define _TimeYear DateTime::_DateTime.timeYear
| |
#define _TimeMonth DateTime::_DateTime.timeMonth
| |
#define _TimeDay DateTime::_DateTime.timeDay
| |
#define _TimeHour DateTime::_DateTime.timeHour
| |
#define _TimeMinute DateTime::_DateTime.timeMinute
| |
#define _TimeSeconds DateTime::_DateTime.timeSeconds
| |
| |
//+------------------------------------------------------------------+
|