Как перевести дату время в значение типа int?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
ROMAN KIVERIN
1189
ROMAN KIVERIN  

Есть исторические данные. Мне надо в сторонней программе перевести дату время в значение типа int, чтобы потом МетаТрейдер смог прочитать это значение как свои родные дату время. Нужен алгоритм перевода из даты время в int.

Спасибо.

Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
Igor Makanu
9864
Igor Makanu  
void OnStart()
   {
   int value = INT_MAX;
   datetime t = (datetime)value; 
   Print("t = ", t);                // t = 2038.01.19 03:14:07
   }
еще 18 лет можно пользоваться
Edgar Akhmadeev
2581
Edgar Akhmadeev  
Igor Makanu:
еще 18 лет можно пользоваться
А если ещё uint...
Igor Makanu
9864
Igor Makanu  
Edgar Akhmadeev:
А если ещё uint...

datatime 8 байт значит нужен long/ulong

но если не ошибаюсь, то задача была без потерь в int - ближайшие 18 лет без проблем можно пользоваться

Dmitry Fedoseev
57491
Dmitry Fedoseev  
Дата это тоже инт. Может быть, дату в виде строки в инт? Есть функция StringToTime(). Про инт лучше забыть, использовать datetime или long.
Документация по MQL5: Преобразование данных / StringToTime
Документация по MQL5: Преобразование данных / StringToTime
  • www.mql5.com
Любая последовательность символов пробела и табуляции между датой и временем считается как один пробел, чтобы не было необходимости в дополнительной обработки строки
Edgar Akhmadeev
2581
Edgar Akhmadeev  
Автор написал, что конвертацию надо производить в сторонней программе. Тогда надо преобразовывать дату в количество секунд с 01.01.1970 и полученный ulong или uint передать в mql.
А если оригинальные данные строковые, проще передать строку и в mql использовать StringToTime.
ROMAN KIVERIN
1189
ROMAN KIVERIN  
Edgar Akhmadeev:
Автор написал, что конвертацию надо производить в сторонней программе. Тогда надо преобразовывать дату в количество секунд с 01.01.1970 и полученный ulong или uint передать в mql.

Тогда надо преобразовывать дату в количество секунд с 01.01.1970 <- Как это преобразовать. Именно это и нужно.

Edgar Akhmadeev:
А если оригинальные данные строковые, проще передать строку и в mql использовать StringToTime.

Оригинальные данные типа

Дата

StringToTime очень не хотелось бы пользоваться, потому что будет занимать время. Будет передаваться миллионов 10 записей. Это время. Строковыми вообще не хотелось бы пользоваться.

Igor Makanu :

datatime 8 байт значит нужен long/ulong

int быстрее обрабатывается

Igor Makanu
9864
Igor Makanu  
ROMAN KIVERIN:

int быстрее обрабатывается

ну и пользуйтесь int ,я же выше пример показал, 18 лет сроку - довольно прилично

ЗЫ: сомневаюсь, что прибавку в скорости получите если int вместо long будете использовать....сам учился по учебникам прошлого века, по моему сейчас это вообще не критично на современных компиляторах и процессорах, если нет больших массивов - тогда сразу используйте ulong вместо int, имхо

Edgar Akhmadeev
2581
Edgar Akhmadeev  
Мы же до сих пор не знаем, из чего надо конвертировать, в каком языке и какой ОС.
Если из двоичных данных, легко. Мне понадобилось преобразовывать дату файла из винды, это заняло минуты.
Если из строки, надо разобраться, какие библиотеки для работы с датами есть в языке. Написать самостоятельно тоже можно, но геморно. Ну или найти алгоритм вычисления разницы между датами и переписать.
ROMAN KIVERIN
1189
ROMAN KIVERIN  
Edgar Akhmadeev:
Мы же до сих пор не знаем, из чего надо конвертировать, в каком языке и какой ОС.
Если из двоичных данных, легко. Мне понадобилось преобразовывать дату файла из винды, это заняло минуты.
Если из строки, надо разобраться, какие библиотеки для работы с датами есть в языке. Написать самостоятельно тоже можно, но геморно. Ну или найти алгоритм вычисления разницы между датами и переписать.

А как бы Вы посоветовали лучше сделать. Есть DateTime С#. Его можно перевести в год, месяц, день и время. А уже потом из этого бульона собрать int который будет кушать mt4. Цель написать Мультивалютный Ручной Тестер стратегий. Пока ещё не встречал тестер для разных валют. Всё вроде реально написать, но вот как этот int получить понятия не имею. Строковые функции в MT4 совсем не хочется трогать. В С# будут разбиваться исторические данные на несколько таймфрейм файлов. Далее уже в МТ4 эти файлы будут читаться и строится графики.

Но опять же как из набора Год, Месяц, день, время получить число int чтобы потом с этим числом мог работать MT4 как со своим родным, пока не ясно.

Нужно что-то пита Год ..... операции + Месяц.....операции + День....операции+время.... операции = ПЕРЕМЕННОЙ, чтобы потом в MT4 смог написать datetime t = (datetime)ПЕРЕМЕННОЙ; и Год, Месяц, День, Час, Минута переменной t соответствовали исходным значения Год, Месяц, День, Час, Минута.

ROMAN KIVERIN
1189
ROMAN KIVERIN  
Igor Makanu:

ну и пользуйтесь int ,я же выше пример показал, 18 лет сроку - довольно прилично

ЗЫ: сомневаюсь, что прибавку в скорости получите если int вместо long будете использовать....сам учился по учебникам прошлого века, по моему сейчас это вообще не критично на современных компиляторах и процессорах, если нет больших массивов - тогда сразу используйте ulong вместо int, имхо

uint

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий