Как правильно работать с MqlDateTime

 

Я думал что поле "day_of_year" в структуре MqlDateTime имеет высший приоритет.

Задумка была такая -

время перегнать в структуру

в структуре увеличить поле "day_of_year" (день года)

отредактированную структуру перегнать во время - это время должно отличаться от первоначального.

//+------------------------------------------------------------------+
//|                                                      Test_en.mq5 |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlDateTime    STimeLocal;
   datetime       time_local=TimeLocal();
   TimeToStruct(time_local,STimeLocal);
   
   Print("TimeLocal: ",TimeToString(time_local,TIME_DATE|TIME_SECONDS));
   
   STimeLocal.day_of_year=STimeLocal.day_of_year+3;
   
   datetime       new_time=StructToTime(STimeLocal);
   
   Print("New Time: ",TimeToString(new_time,TIME_DATE|TIME_SECONDS));
  }
//+------------------------------------------------------------------+


Но итог оказался не такой:

TimeLocal: 2019.01.09 11:38:03
New Time: 2019.01.09 11:38:03

хоть и было отредактировано поле "day_of_year" (день года) -  время не изменилось. А раньше работало.

Файлы:
Test_en.mq5  2 kb
 

Вычислите datetime на начало года и прибавьте к ней нужный день умноженный на количество секунд в дне.

А если полю day_of_year поставить высший приоритет, то перестанут работать остальные поля.