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