Art12900_Structs/TestMqlDateTime.mq5
2026-03-02 00:59:19 +07:00

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
*/
}
//+------------------------------------------------------------------+