I have two dates given in text format, I want to have the real duration in seconds between the two values.
The answer is -24, and I can do it parsing the strings. But does MATLAB have a function to do it nice and quick?
If I do the following the answer is not a -24 that I can use as a double:
datenum('2018-09-07 18:36:05.079')-datenum('2018-09-07 18:36:29.079')
I need this time for a Simulink simulation. For example, I might need the duration in seconds between two days.

2 Kommentare

Stephen23
Stephen23 am 7 Sep. 2018
"The answer is 24"
The answer is actually -24
Luis Ruiz
Luis Ruiz am 10 Sep. 2018
I edited my question to match the answers.

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Stephen23
Stephen23 am 7 Sep. 2018
Bearbeitet: Stephen23 am 7 Sep. 2018

1 Stimme

To get seconds simply multiply the days by 60*60*24:
>> F = 'yyyy-mm-dd HH:MM:SS.FFF';
>> D = datenum('2018-09-07 18:36:05.079',F)-datenum('2018-09-07 18:36:29.079',F);
>> D*60*60*24
ans = -24.000

2 Kommentare

Luis Ruiz
Luis Ruiz am 10 Sep. 2018
Bearbeitet: Luis Ruiz am 10 Sep. 2018
This one seems to be the right answer, but then, does it mean that operations between two datenum values are always in days?
Stephen23
Stephen23 am 10 Sep. 2018
@Luis Ruiz: yes, datenum always returns days. But the conversion to seconds is trivial, as my answer shows.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Peter Perkins
Peter Perkins am 7 Sep. 2018

3 Stimmen

If possible, don't use datenum. Use datetimes:
>> fmt = 'yyyy-MM-dd HH:mm:ss.SSS';
>> dur = datetime('2018-09-07 18:36:05.079','Format',fmt) - datetime('2018-09-07 18:36:29.079','Format',fmt)
dur =
duration
-00:00:24
>> dur.Format = 's'
dur =
duration
-24 sec

3 Kommentare

Stephen23
Stephen23 am 7 Sep. 2018
@Peter Perkins: which of these will give a numeric value 24 for further processing? From the displayed representation it seems that none of these are numeric types, so it would be of interest to know which one could be used in an algorithm as a numeric value. (e.g. I wrote a hash function to encode data based on the seconds, which requires arithmetic operations... mod, times, etc).
To turn it into a double, e.g.
seconds(dur)
Peter Perkins
Peter Perkins am 12 Sep. 2018
As James says, you can convert, but the point of duration is that you may not need a number. duration supports all kinds of time arithmetic. Hard to know if that's possible in your case.

Melden Sie sich an, um zu kommentieren.

Image Analyst
Image Analyst am 7 Sep. 2018
Bearbeitet: Image Analyst am 10 Sep. 2018

1 Stimme

Try the etime() function.
t1 = datevec('2018-09-08 18:36:05.079','yyyy-mm-dd HH:MM:SS.FFF')
t2 = datevec('2018-09-07 18:36:29.079','yyyy-mm-dd HH:MM:SS.FFF')
elapsedTime = etime(t1, t2) % Results in seconds.

Kategorien

Produkte

Version

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by