2012-08-31 36 views

Trả lời

16

datestr có lẽ là chức năng bạn đang tìm kiếm. Thể hiện khoảng thời gian của bạn dưới dạng phần thập phân của một ngày, ví dụ:

>> datestr(0.25, 'HH:MM:SS.FFF') 

ans = 

06:00:00.000  

Tức là một phần tư mỗi ngày là 6 giờ. Nếu bạn muốn thay đổi khoảng thời gian dài hơn một ngày theo cách này bạn sẽ phải điều chỉnh số thứ hai, mà định dạng đầu ra của chức năng, ví dụ:

>> datestr(2.256789741, 'DD:HH:MM:SS.FFF') 

ans = 

02:06:09:46.634 

Đối số đầu tiên để datestr cũng có thể là một trong hai ngày vector hoặc chuỗi ngày thay vì số sê-ri ngày. Điều này sẽ giúp bạn bắt đầu, nếu bạn gặp vấn đề, hãy đặt một câu hỏi khác hoặc chỉnh sửa câu hỏi này.

-
Để chuyển đổi thời gian bằng giây sử dụng datestr, chia giá trị cho 24 * 60 * 60.

mẫu:

t1 = toc; 
timeString = datestr(t1/(24*60*60), 'DD:HH:MM:SS.FFF'); 
7

Tôi không biết một hàm built-in. Tuy nhiên, có một SEC2HMS trên Trao đổi tệp của Matlab. Về cơ bản, nó nắm một cái gì đó giống như

function [hours, mins, secs] = sec2hms(t) 
    hours = floor(t/3600); 
    t = t - hours * 3600; 
    mins = floor(t/60); 
    secs = t - mins * 60; 
end 

Nếu bạn cũng muốn có nó được định dạng, sử dụng một printf:

function hms = sec2hms(t) 
    hours = floor(t/3600); 
    t = t - hours * 3600; 
    mins = floor(t/60); 
    secs = t - mins * 60; 
    hms = sprintf('%02d:%02d:%05.2f\n', hours, mins, secs); 
end 

sec2hms(69.9904) 
ans = 
    00:01:09.99 
4

Nếu bạn muốn từ đầu vào thứ hai ban đầu, chỉ cần chuyển nó sang một phần nhỏ của ngày:

datestr (25/24/3600, 'DD-HH: MM: SS')

ans =

00-00: 00: 25

Chỉ cần cung cấp cho nó trong 25 giây (kể từ tic/toc)

4

Nếu bạn muốn để có được những giờ, phút và giây khi tăng gấp đôi hãy xem xét dòng mã sau đây:

seconds = 5000; 
hms = fix(mod(seconds, [0, 3600, 60]) ./ [3600, 60, 1]) 

hms = 

1 23 20 

Dòng mã này nhanh hơn 100 lần so với việc sử dụng datestr funciton.

nIterations = 10000; 

tic 
for i = 1:nIterations 
    hms = fix(mod(seconds, [0, 3600, 60])./[3600, 60, 1]); 
end 
sprintf('%f ms\r', toc/nIterations * 1000) 

cung cấp 0.001934 ms.

tic 
for i = 1:nIterations 
    datestr(seconds/24/3600, 'HH:MM:SS'); 
end 
sprintf('%f ms\r', toc/nIterations * 1000) 

cho 0.209402 ms.

Các vấn đề liên quan