Существует три формата, которые обрабатываются Matlab для времени: отформатированные строки даты - что datestr
выводит -, последовательная дата - скалярное удвоение, что datenum
выводит - и векторы даты (см. datevec
).Функции преобразования работают с этими тремя, и наиболее удобный способ преобразования отдельных переменных (год, месяц и т. Д.) В дату состоит в построении вектора даты [yyyy mm dd HH MM SS]
.
date_gps_str_to_serial = datenum([y m d 0 0 0]); % midnight on day y-m-d
date_Jan_6_1980 = datenum([1980 01 06 0 0 0]); % midnight on Jan 6th, 1980
Num_Days = date_gps_str_to_serial - date_Jan_6_1980;
Теперь остерегайтесь високосных секунд ...
Время GPS вычисляется из времени, прошедшего с 6 января 1980 года. Возьмем количество секунд, прошедших с этого дня, измеренное атомными часами спутников, разделенное на(24 * 3600), чтобы получить количество дней, остаток - это время дня (в секундах с полуночи).
Но время от времени Международные системы вращения Земли и системы отсчетаСлужба решит, что день будет длиться одну секунду дольше, чтобы приспособиться к замедлению вращения Земли.Это может происходить два раза в год, 30 июня или 31 декабря.Расчет времени GPS неверен, поскольку он не учитывает, что некоторые дни длятся 86401 секунду (поэтому деление на 24 * 3600 не работает), и будет продвигаться на 1 секунду относительно UTC каждый раз, когда это происходит.С 6 января 1980 года таких дней было 18, поэтому нужно вычесть 18 секунд из времени GPS, чтобы найти время UTC.В следующий раз можно добавить високосную секунду - июнь 2019 года.