2016-07-08 3 views
0

Как конвертировать вектор часов, например 22.93, во время дня?Конвертировать время от времени в matlab

Так что 22.93 должно быть преобразовано в 22:55:48? Благодаря!

+2

Когда время в 24-часовом формате, AM/PM обычно не указывается. Вы уверены, что это то, что вы хотите? –

+0

Возможно, именно так данные были представлены мне в программном обеспечении. Может быть, вы недостаточно умны, чтобы делать другие предположения ... – TYL

ответ

3

Как обсуждалось here, это может быть сделано с помощью datestr:

>> datestr(22.93/24,'HH:MM:SS') 

ans = 

22:55:48 

Обратите внимание, что я разделив на 24, потому что datestr ожидает, что дробная часть, чтобы представлять «процент в день» (который имеет 24 часа).

В качестве примера для вектора, также включая суффикс AM/PM:

v = [22.93 13.6167 16.3334]; 
strcat(datestr(v(:)/24,'HH:MM:SS'),{' '},datestr(v(:)/24,'AM')) 

ans = 

    '22:55:48 PM' 
    '13:37:00 PM' 
    '16:20:00 PM' 

Обратите внимание, что здесь результат является cell массивом char векторов-строк, где в первом случае это было char массивом.

1

Если то, что вы делаете позволяет генерировать значения времени я бы рекомендовал использовать формат ниже, потому что все эти функции встроены.

http://www.mathworks.com/help/matlab/ref/datenum.html

В противном случае, если вы не имеете никакого контроля над тем, как данные вам, возможно, захочется преобразовать вектор в массив ячеек, чтобы вы могли использовать cellfun (functionName, matrix) в массиве ячеек для применения функции «functionName» к каждой ячейке. Тогда все, что вам нужно сделать, это написать функцию, чтобы преобразовать час как двойной в стандартный формат времени и заменить на него имя функции.

1
% hours h minutes m seconds s 
h0=22.93; 

h=floor(h0) 
m=floor((h0-floor(h0))*60) 
s=60*((h0-floor(h0))*60 -floor((h0-floor(h0))*60)) 
Смежные вопросы