Can one extract a unit of time from a duration object?
18 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Alexandre Aksenov
el 1 de Nov. de 2022
Editada: Alexandre Aksenov
el 26 de Dic. de 2022
Some of my programs of data analysis produce 'duration' objects, and I am looking for a way of printing them as strings.
I have the option of guessing an appropriate unit of time from data, then calling a (relatively unnatural) instruction like:
sprintf("%.2f sec",seconds(T2print))
Relatively unexpectedly, both "char" and "string" operators' results seem to depend on how the object has been initially created, as the following code shows.
Tsec = seconds(1)
%-> duration
% 1 sec
Tmin = minutes(1)
%-> duration
% "1 min"
isequal(60*Tsec,Tmin)
%true !
string(60*Tsec)
% "60 sec"
char(60*Tsec)
%'60 sec'
string(Tmin)
%"1 min"
char(Tmin)
%'1 min'
It is certainly possible to parse the output of "string", then to extract the unit of time, but I would like to find a simpler way of finding it. Getting identical results for equal durations would obviously be a positive point.
My question is related to this one:
Thanks for your attention!
0 comentarios
Respuesta aceptada
Steven Lord
el 1 de Nov. de 2022
MATLAB will try to select a good format for the duration object based on the data with which it was created. But if you want all your duration objects to have a consistent format, you can specify it.
s = seconds(60)
formatForSeconds = s.Format
m = minutes(1)
formatForMinutes = m.Format
Let's change the format for m to be the same as the format for s.
m.Format = formatForSeconds
Now that they're using the same format, converting them to text data will give the same text data.
sString = string(s)
mString = string(m)
isequal(sString, mString)
See the section about the Format property of duration objects on the duration documentation page for a list of available format components.
1 comentario
Más respuestas (1)
Lei Hou
el 18 de Nov. de 2022
Hi Alexandre,
Applying seconds/minutes/... to a duration array returns numeric value
>> d1 = seconds(60)
d1 =
duration
60 sec
>> d2 = minutes(1)
d2 =
duration
1 min
>> x1 = seconds(d1)
x1 =
60
>> x2 = seconds(d2)
x2 =
60
>> isequal(seconds(d1),seconds(d2))
ans =
logical
1
Hoping this is helpful.
Thanks,
Lei
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!