2017-01-19 3 views
0

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

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

ответ

1

В дополнение к @ 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 экземпляров.

1

Здесь вы можете выбрать строки после явного удаления всего, кроме информации о времени. Пусть 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,:); 
Смежные вопросы