Добавление дополнительных минут времени к текущему времени в MATLAB (часовой пояс)

Я хочу добавить переменную Correction к текущему времени, чтобы получить новое время.

Вот мой код, чтобы получить текущее время (работает):

datestr(now);
d = rem(now,1);
datestr(d);
time = datestr(d, 'HH:MM');

Вот мой код, показывающий, как получить коэффициент коррекции (рабочий):

c = clock();
tsNow = datenum(c);
tsStart = datenum([c(1) 1 1 0 0 0]); 
daysInYear = tsNow - tsStart;
DayOfYear = floor(daysInYear);

B = 360/365*(DayOfYear-81);
EoT = 9.87*sind(2*B)-7.53*cosd(B)-1.5*sind(B);
Correction = EoT - (4*(0-3.173));
Declination = 23.45*sind((360/365)*(284+DayOfYear));

Как мне разобрать Correction, чтобы он прибавил свое значение в формате ЧЧ: ММ к текущему времени? Проще говоря

AST = time + Correction;

Печатает AST как вектор с 6 значениями.

Примечание: формат ЧЧ: ММ - это 24-часовой формат, и коррекция обычно добавляет от 0 до 60 минут ко времени на часах, поэтому я не уверен, как он будет обрабатывать остаток.


person loco    schedule 14.11.2013    source источник


Ответы (1)


Добавив time, имеющего тип string, к Correction, которое является числом, вы не получите ничего разумного.

datenum может вам здесь помочь. Он может преобразовывать вектор даты в число даты. Я не специалист в этом вопросе. Но я знаю, что формат данных, возвращаемый командой now, называется числом даты. (См. здесь, чтобы узнать о других функциях и увидеть их ввод и типы вывода)

Однако в вашем случае проще иметь дело с представлением времени вектор даты:

Полный вектор даты состоит из шести элементов, определяющих год, месяц, день, час, минуту и ​​секунду в указанном порядке. .... Пример: [2003,10,24,12,45,07]

Таким образом, вы можете преобразовать время Correction в номер даты с помощью datenum, а затем добавить его к значению, полученному из now (здесь d):

datestr(d + datenum([0 0 0 0 0 Correction]))

Считается, что Correction находится в секундах.

Надеюсь, это поможет.

person p8me    schedule 15.11.2013
comment
Корректировка измеряется в минутах с десятичной частью значения, представляющей секунды. Я попробовал эту последнюю строку кода, но она не работала с исправлением ни в одной из последних 3 позиций (в течение нескольких минут). В 4-й позиции возвращается неверная ДАТА и время. Есть еще мысли? Изменить: извиняюсь, я забыл повторно запустить программу, поэтому она использовала неправильное значение времени с момента последнего запуска программы. Я думаю, это работает. Новое значение из datestr (d + datenum ...) теперь является строкой или числом? - person loco; 15.11.2013
comment
Что ж, если это в минутах, вы должны ввести второй элемент вектора: [0 0 0 0 Correction 0]. Даже если Correction не является целым числом, нет проблем, десятичная часть будет добавлена ​​к секундам. Я имею в виду, что 0.1 минуты будут, конечно, 6 секундами. - person p8me; 15.11.2013
comment
datestr возвращает строку, возьмите бабло по ссылке, которую я поставил, поможет. - person p8me; 15.11.2013