Но вы не сказали Matlab, что на следующий день 01:00, вы не можете ожидать, что он просто предположит это. Фактически вы фактически используете строки даты, а не строки времени. Matlab, по какой-то причине, решил, что ваши даты на 1 января 2015 г. Для того, чтобы увидеть эту попытку:
time = {'01:00:00';
'22:00:00'};
datestr(datenum(times));
Я не знаю, почему он выбрал 1го января 2015 года, но это имеет смысл что он последовательно выбирал ту же дату для обоих времен, а не как-то читал ваш разум и выбирал 01:00 на следующий день.
Если вы хотите это исправить, вам также необходимо указать информацию о дате. Комплектование любой произвольной даты в качестве основы:
time = {'02-Jan-2015 01:00:00';
'01-Jan-2015 22:00:00'}
Теперь ваш код должен дать вам время вы хотели:
datestr(mean(datenum(time)),'HH:MM:ss')
Примечание, если вы хотите автоматизировать этот процесс, можно сказать, предположить, что любой раз, прежде чем скажем 4:00 это на следующий день, а затем просто добавить один день к тем элементам (после datenum
конечно)
на основе вашего редактирования:
time = {'09/01/2012 23:57:00';
'11/01/2012 01:36:00';
'12/01/2012 00:48:00';
'13/01/2012 00:35:00';}
hours = str2num(datestr(time, 'HH')); %// Extract just the hour from the datetime
t = datenum(datestr(time, 'HH:MM:ss')); %// Extract just the time (i.e. make everything on the same day
t = t+(hours<5); %// Add one day to everything after midnight. 5 is an assumption, you can tweak this cut-off time.
datestr(mean(t),'HH:MM:ss')
ans =
00:44:00
Кстати, вы можете проверить новый тип данных datetime
. Я еще не использовал его сам, но как пример, получить час тайм-аута было бы намного проще (ну, менее хаки), и я уверен, что есть и другие преимущества. Вот моя попытка:
dates = datetime(time); %// using your time cell array of strings still
%// Now we must make them all the same arbitrary day:
dates.Day = 1;
dates.Year = 2015; %// or 0 or datetime('today').Year
dates.Month = 1;
%// Now we add days to those after midnight the same as before
dates.Day = dates.Day + (dates.Hour < 5);
mean(dates) %// Or datestr(mean(dates),'HH:MM:ss')
Неверно? 1:00:00 + 22:00:00 = 23:00:00 и разделите это на 2, вы получите 11:30:00. – aconkey
Также я думаю, что ваш вектор 'time' и векторное имя' test', используемые в 'datestr', не соответствуют – aconkey
Привет, спасибо за ваш комментарий. среднее между 01:00 и 22:00 должно быть 23:30 вечера ... не так ли? – gabboshow