Способ собрать datetime.

 

Есть такие параметры:

int NewHour=21;
TimeCurrent(); //2021.10.22 16:30:00

Надо собрать новое datetime - 2021.10.22 21:00:00. Как это луче сделать?

datetime NewDate=???;
 
datetime NewDate = TimeCurrent() / (24 * 3600) * (24 * 3600) + NewHour * 3600;
 
datetime SetHour(datetime dtime, int hour) {
    MqlDateTime mdt;
    TimeToStruct(dtime, mdt);
    mdt.hour = hour;
    return StructToTime(mdt);
}
 
fxsaber #:

Ого! Результат правильный, то что надо, хотя не понятно как эта функция работает. Спасибо!

 
Malik Arykov #:


Спасибо! Не будет правильный результат. NewDate1: 2021.10.22 21:30:00

 
Nauris Zukas #:

Ого! Результат правильный, то что надо, хотя не понятно как эта функция работает. Спасибо!

Всё там понятно: вычисляется начало дня и прибавляется количество секунд до начала требуемого часа.
 
Sergey Gridnev #:
Всё там понятно: вычисляется начало дня и прибавляется количество секунд до начала требуемого часа.

Тогда поясните как из этого: datetime / (24 * 3600) * (24 * 3600) получается вычислить начало дня?

 
Nauris Zukas #:

Тогда поясните как из этого: datetime / (24 * 3600) * (24 * 3600) получается вычислить начало дня?

it's some kind of magic

 
Nauris Zukas #:

Тогда поясните как из этого: datetime / (24 * 3600) * (24 * 3600) получается вычислить начало дня?

datetime  это целочисленный тип, поэтому после операции деления дробных значений не будет

если не понятно и так, то руками попробуйте  с карандашом и бумагой  выполнить расчеты по правилам математических операций: - скобки и слева направо

 
Igor Makanu #:

datetime  это целочисленный тип, поэтому после операции деления дробных значений не будет

если не понятно и так, то руками попробуйте  с карандашом и бумагой  выполнить расчеты по правилам математических операций: - скобки и слева направо

я думаю, что человеку будет проще понять, если так написать, чтоб не путаться с последовательностью операций:

datetime NewDate = NewHour * 3600 + 24 * 3600 * TimeCurrent() / (24 * 3600);
 
Nikolai Semko #:

я думаю, что человеку будет проще понять, если так написать, чтоб не путаться с последовательностью операций:

Спасибо! Да, что-то я сам запутался с скобками. Всё понятно! :D