264 lines
24 KiB
MQL5
264 lines
24 KiB
MQL5
//+------------------------------------------------------------------+
|
|
//| TestMqlDateTime.mq5 |
|
|
//| Copyright 2023, MetaQuotes Ltd. |
|
|
//| https://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2023, MetaQuotes Ltd."
|
|
#property link "https://www.mql5.com"
|
|
#property version "1.00"
|
|
//+------------------------------------------------------------------+
|
|
//| Script program start function |
|
|
//+------------------------------------------------------------------+
|
|
void OnStart()
|
|
{
|
|
MqlDateTime dt;
|
|
TimeCurrent(dt);
|
|
MqlDateTimePrint(dt,true);
|
|
MqlDateTimePrint(dt,false,14,2);
|
|
|
|
/* Пример вывода:
|
|
GBPUSD H1 [00] Wed, July 19, 2023, 02:00:00
|
|
GBPUSD H1 [01] Wed, July 19, 2023, 03:00:00
|
|
GBPUSD H1 [02] Wed, July 19, 2023, 04:00:00
|
|
GBPUSD H1 [03] Wed, July 19, 2023, 05:00:00
|
|
GBPUSD H1 [04] Wed, July 19, 2023, 06:00:00
|
|
GBPUSD H1 [05] Wed, July 19, 2023, 07:00:00
|
|
GBPUSD H1 [06] Wed, July 19, 2023, 08:00:00
|
|
GBPUSD H1 [07] Wed, July 19, 2023, 09:00:00
|
|
GBPUSD H1 [08] Wed, July 19, 2023, 10:00:00
|
|
GBPUSD H1 [09] Wed, July 19, 2023, 11:00:00
|
|
*/
|
|
|
|
/* Пример вывода:
|
|
Wed, July 19, 2023, 09:33:56
|
|
Year: 2023
|
|
Month: 07 (July)
|
|
Day: 19
|
|
Hour: 09
|
|
Minutes: 33
|
|
Seconds: 56
|
|
Day of week: Wednesday (3)
|
|
Day of year: 199
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает наименование дня недели |
|
|
//+------------------------------------------------------------------+
|
|
string DayWeek(MqlDateTime &date_time)
|
|
{
|
|
//--- Определяем название дня недели
|
|
string dw=EnumToString((ENUM_DAY_OF_WEEK)date_time.day_of_week);
|
|
//--- Преобразуем все полученные символы в нижний регистр и заменяем первую букву с маленькой на заглавную
|
|
if(dw.Lower())
|
|
dw.SetChar(0,ushort(dw.GetChar(0)-0x20));
|
|
//--- Возвращаем полученную строку
|
|
return dw;
|
|
/* Пример вывода:
|
|
Wednesday
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает наименование месяца |
|
|
//+------------------------------------------------------------------+
|
|
string Month(MqlDateTime &date_time)
|
|
{
|
|
//--- Определяем название месяца
|
|
switch(date_time.mon)
|
|
{
|
|
case 1 : return "January";
|
|
case 2 : return "February";
|
|
case 3 : return "March";
|
|
case 4 : return "April";
|
|
case 5 : return "May";
|
|
case 6 : return "June";
|
|
case 7 : return "July";
|
|
case 8 : return "August";
|
|
case 9 : return "September";
|
|
case 10 : return "October";
|
|
case 11 : return "November";
|
|
case 12 : return "December";
|
|
default : return "Undefined";
|
|
}
|
|
/* Пример вывода:
|
|
July
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает в виде строки год из структуры MqlDateTime |
|
|
//+------------------------------------------------------------------+
|
|
string MqlDateTimeYear(MqlDateTime &date_time,const uint header_width=0,const uint indent=0)
|
|
{
|
|
//--- Определяем текст заголовка и ширину поля заголовка
|
|
//--- Если ширина заголовка передана в функцию равной нулю, то шириной будет размер строки заголовка + 1
|
|
string header="Year:";
|
|
uint w=(header_width==0 ? header.Length()+1 : header_width);
|
|
//--- Возвращаем значение свойства с заголовком с нужной шириной и отступом
|
|
return StringFormat("%*s%-*s%-lu",indent,"",w,header,date_time.year);
|
|
/* Пример вывода:
|
|
Year: 2023
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает в виде строки месяц из структуры MqlDateTime |
|
|
//+------------------------------------------------------------------+
|
|
string MqlDateTimeMonth(MqlDateTime &date_time,const uint header_width=0,const uint indent=0)
|
|
{
|
|
//--- Определяем текст заголовка и ширину поля заголовка
|
|
//--- Если ширина заголовка передана в функцию равной нулю, то шириной будет размер строки заголовка + 1
|
|
string header="Month:";
|
|
uint w=(header_width==0 ? header.Length()+1 : header_width);
|
|
//--- Получаем название месяца
|
|
string mn=Month(date_time);
|
|
//--- Возвращаем значение свойства с заголовком с нужной шириной и отступом
|
|
return StringFormat("%*s%-*s%02lu (%s)",indent,"",w,header,date_time.mon,mn);
|
|
/* Пример вывода:
|
|
Month: 07 (July)
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает в виде строки день из структуры MqlDateTime |
|
|
//+------------------------------------------------------------------+
|
|
string MqlDateTimeDay(MqlDateTime &date_time,const uint header_width=0,const uint indent=0)
|
|
{
|
|
//--- Определяем текст заголовка и ширину поля заголовка
|
|
//--- Если ширина заголовка передана в функцию равной нулю, то шириной будет размер строки заголовка + 1
|
|
string header="Day:";
|
|
uint w=(header_width==0 ? header.Length()+1 : header_width);
|
|
//--- Возвращаем значение свойства с заголовком с нужной шириной и отступом
|
|
return StringFormat("%*s%-*s%02lu",indent,"",w,header,date_time.day);
|
|
/* Пример вывода:
|
|
Day: 19
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает в виде строки часы из структуры MqlDateTime |
|
|
//+------------------------------------------------------------------+
|
|
string MqlDateTimeHour(MqlDateTime &date_time,const uint header_width=0,const uint indent=0)
|
|
{
|
|
//--- Определяем текст заголовка и ширину поля заголовка
|
|
//--- Если ширина заголовка передана в функцию равной нулю, то шириной будет размер строки заголовка + 1
|
|
string header="Hour:";
|
|
uint w=(header_width==0 ? header.Length()+1 : header_width);
|
|
//--- Возвращаем значение свойства с заголовком с нужной шириной и отступом
|
|
return StringFormat("%*s%-*s%02lu",indent,"",w,header,date_time.hour);
|
|
/* Пример вывода:
|
|
Hour: 08
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает в виде строки минуты из структуры MqlDateTime |
|
|
//+------------------------------------------------------------------+
|
|
string MqlDateTimeMin(MqlDateTime &date_time,const uint header_width=0,const uint indent=0)
|
|
{
|
|
//--- Определяем текст заголовка и ширину поля заголовка
|
|
//--- Если ширина заголовка передана в функцию равной нулю, то шириной будет размер строки заголовка + 1
|
|
string header="Minutes:";
|
|
uint w=(header_width==0 ? header.Length()+1 : header_width);
|
|
//--- Возвращаем значение свойства с заголовком с нужной шириной и отступом
|
|
return StringFormat("%*s%-*s%02lu",indent,"",w,header,date_time.min);
|
|
/* Пример вывода:
|
|
Minutes: 41
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает в виде строки секунды из структуры MqlDateTime |
|
|
//+------------------------------------------------------------------+
|
|
string MqlDateTimeSec(MqlDateTime &date_time,const uint header_width=0,const uint indent=0)
|
|
{
|
|
//--- Определяем текст заголовка и ширину поля заголовка
|
|
//--- Если ширина заголовка передана в функцию равной нулю, то шириной будет размер строки заголовка + 1
|
|
string header="Seconds:";
|
|
uint w=(header_width==0 ? header.Length()+1 : header_width);
|
|
//--- Возвращаем значение свойства с заголовком с нужной шириной и отступом
|
|
return StringFormat("%*s%-*s%02lu",indent,"",w,header,date_time.sec);
|
|
/* Пример вывода:
|
|
Seconds: 23
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает в виде строки день недели из структуры MqlDateTime |
|
|
//+------------------------------------------------------------------+
|
|
string MqlDateTimeDayWeek(MqlDateTime &date_time,const uint header_width=0,const uint indent=0,bool descr=true)
|
|
{
|
|
//--- Определяем текст заголовка и ширину поля заголовка
|
|
//--- Если ширина заголовка передана в функцию равной нулю, то шириной будет размер строки заголовка + 1
|
|
string header="Day of week:";
|
|
uint w=(header_width==0 ? header.Length()+1 : header_width);
|
|
//--- Получаем название дня недели
|
|
string dw=DayWeek(date_time);
|
|
//--- Возвращаем значение свойства с заголовком с нужной шириной и отступом
|
|
return StringFormat("%*s%-*s%-s (%-lu)",indent,"",w,header,dw,date_time.day_of_week);
|
|
/* Пример вывода:
|
|
Day of week: Wednesday (3)
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//|Возвращает в виде строки номер дня в году из структуры MqlDateTime|
|
|
//+------------------------------------------------------------------+
|
|
string MqlDateTimeDayYear(MqlDateTime &date_time,const uint header_width=0,const uint indent=0)
|
|
{
|
|
//--- Определяем текст заголовка и ширину поля заголовка
|
|
//--- Если ширина заголовка передана в функцию равной нулю, то шириной будет размер строки заголовка + 1
|
|
string header="Day of year:";
|
|
uint w=(header_width==0 ? header.Length()+1 : header_width);
|
|
//--- Возвращаем значение свойства с заголовком с нужной шириной и отступом
|
|
return StringFormat("%*s%-*s%-lu",indent,"",w,header,date_time.day_of_year);
|
|
/* Пример вывода:
|
|
Day of year: 199
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Возвращает в виде строки дату из структуры MqlDateTime |
|
|
//| в формате DW, Month DD, YYYY, HH:MM:SS |
|
|
//+------------------------------------------------------------------+
|
|
string DateTime(MqlDateTime &date_time)
|
|
{
|
|
//--- Получаем месяц и первые три символа дня недели
|
|
string mn=Month(date_time);
|
|
string dw=StringSubstr(DayWeek(date_time),0,3);
|
|
//--- Возвращаем строку, отформатированную в формате DW, Month DD, YYYY, HH:MM:SS
|
|
return StringFormat("%s, %s %02lu, %lu, %02lu:%02lu:%02lu",dw,mn,date_time.day,date_time.year,date_time.hour,date_time.min,date_time.sec);
|
|
/* Пример вывода:
|
|
Wed, July 19, 2023, 08:41:23
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Выводит в журнал описание всех полей структуры MqlDateTime |
|
|
//+------------------------------------------------------------------+
|
|
void MqlDateTimePrint(MqlDateTime &date_time,const bool short_entry=true,const uint header_width=0,const uint indent=0)
|
|
{
|
|
//--- Если краткая запись - выводим в журнал дату-время в формате DW, Month DD, YYYY, HH:MM:SS
|
|
if(short_entry)
|
|
Print(DateTime(date_time));
|
|
/* Пример вывода:
|
|
Wed, July 19, 2023, 08:41:23
|
|
*/
|
|
//--- Иначе
|
|
else
|
|
{
|
|
//--- создаём строку с описанием всех данных структуры с отступами и заданной шириной поля заголовка
|
|
string res=StringFormat("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",
|
|
MqlDateTimeYear(date_time,header_width,indent),
|
|
MqlDateTimeMonth(date_time,header_width,indent),
|
|
MqlDateTimeDay(date_time,header_width,indent),
|
|
MqlDateTimeHour(date_time,header_width,indent),
|
|
MqlDateTimeMin(date_time,header_width,indent),
|
|
MqlDateTimeSec(date_time,header_width,indent),
|
|
MqlDateTimeDayWeek(date_time,header_width,indent),
|
|
MqlDateTimeDayYear(date_time,header_width,indent)
|
|
);
|
|
//--- Выводим в журнал полученную строку
|
|
Print(res);
|
|
}
|
|
/* Пример вывода:
|
|
Year: 2023
|
|
Month: 07 (July)
|
|
Day: 19
|
|
Hour: 09
|
|
Minutes: 32
|
|
Seconds: 25
|
|
Day of week: Wednesday (3)
|
|
Day of year: 199
|
|
*/
|
|
}
|
|
//+------------------------------------------------------------------+
|