Определите временной диапазон в Matlab просто на основе времени (не даты)

Я пытаюсь использовать функцию временного диапазона Matlab для выбора строк расписания в течение определенного интервала времени, например. с 12:00 до 16:00. Поскольку у меня есть 30 разных дней, каждый день охватывает разное время, я хотел бы игнорировать дату и получить все строки, время которых попадает в мой временной интервал, независимо от дня. Если я напишу только время в строке ниже, Matlab по умолчанию использует сегодня. Я был бы очень признателен, если бы кто-нибудь помог мне узнать, как использовать только время (а не даты) в качестве индекса.

S = timerange('??? 12:00:00','??? 16:00:00');
Output = TT(S,:);

person Paula    schedule 19.01.2017    source источник


Ответы (2)


В дополнение к ответу @aksadv есть более аккуратное решение с использованием типов duration, например:

times = datetime(2017, 01, randi([1 31], 10, 1), ...
    randi(24, 10, 1), randi(60, 10, 1), randi(60, 10, 1));
tt = timetable(times, rand(10, 1));
% Use TIMEOFDAY to convert datetimes into durations representing
% the time of day:
tt.times = timeofday(tt.times)
% TIMERANGE can be used with durations too. Use HOURS to construct
% the duration objects
tt(timerange(hours(12), hours(16)), :)

При этом используется timeofday для извлечения компонента времени и hours для создания duration экземпляров.

person Edric    schedule 20.01.2017

Вот способ, который выбирает строки после явного удаления всего, кроме информации о времени. Пусть TT будет входным расписанием.

% Create another timetable with the same time information
%  It also has one data column which represents the row index
tempTT = timetable(TT.Time, (1:height(TT))');

% remove the Year, Month, and Date information
tempTT.Time.Year  = 1;
tempTT.Time.Month = 1;
tempTT.Time.Day   = 1;

% Select the desired timerange
S = timerange('1-1-1 12:00:00','1-1-1 16:00:00');

% Get the row indices of the selected rows
idxSel = tempTT(S,:).Variables;

% Select the desired rows from the original timetable
Output = TT(idxSel,:);
person aksadv    schedule 20.01.2017