why does this not work?

7 visualizzazioni (ultimi 30 giorni)
Rob
Rob il 27 Mar 2025
Commentato: Walter Roberson il 27 Mar 2025
>> x='0:07.50 2:03.91 3:57.36 5:09.44 6:32.90 7:43.03 9:43.45';
>> datetime(x,'InputFormat','m:ss.SS')
Error using datetime (line 257)
Unable to convert '0:07.50 2:03.91 3:57.36 5:09.44 6:32.90 7:43.03 9:43.45' to
datetime using the format 'm:ss.SS'.

Risposta accettata

Les Beckham
Les Beckham il 27 Mar 2025
Modificato: Les Beckham il 27 Mar 2025
That doesn't work because your x is one long character vector and datetime tries to match your input format to the entire contents of x. Instead define x as either a string array or a cell array of character vectors.
Using a string array:
x = [ "0:07.50" "2:03.91" "3:57.36" "5:09.44" "6:32.90" "7:43.03" "9:43.45" ];
dt1 = datetime(x,'InputFormat','m:ss.SS')
dt1 = 1x7 datetime array
27-Mar-2025 00:00:07 27-Mar-2025 00:02:03 27-Mar-2025 00:03:57 27-Mar-2025 00:05:09 27-Mar-2025 00:06:32 27-Mar-2025 00:07:43 27-Mar-2025 00:09:43
Using a cell array of char vectors:
x= { '0:07.50' '2:03.91' '3:57.36' '5:09.44' '6:32.90' '7:43.03' '9:43.45' };
dt2 = datetime(x,'InputFormat','m:ss.SS')
dt2 = 1x7 datetime array
27-Mar-2025 00:00:07 27-Mar-2025 00:02:03 27-Mar-2025 00:03:57 27-Mar-2025 00:05:09 27-Mar-2025 00:06:32 27-Mar-2025 00:07:43 27-Mar-2025 00:09:43
isequal(dt1, dt2)
ans = logical
1
Edit:
If you want to convert your datetime array to numeric seconds:
dt_seconds = 60*minute(dt1) + second(dt1)
dt_seconds = 1×7
7.5000 123.9100 237.3600 309.4400 392.9000 463.0300 583.4500
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>

Più risposte (3)

John D'Errico
John D'Errico il 27 Mar 2025
It failed because datetime did not recognize that string as a list of distinct times. Just because you know what you want code to do, does not mean it will read your mind. Code is pretty dumb in general.
x='0:07.50 2:03.91 3:57.36 5:09.44 6:32.90 7:43.03 9:43.45';
xspl = strsplit(x,' ')
xspl = 1x7 cell array
{'0:07.50'} {'2:03.91'} {'3:57.36'} {'5:09.44'} {'6:32.90'} {'7:43.03'} {'9:43.45'}
datetime(xspl,'InputFormat','m:ss.SS')
ans = 1x7 datetime array
27-Mar-2025 00:00:07 27-Mar-2025 00:02:03 27-Mar-2025 00:03:57 27-Mar-2025 00:05:09 27-Mar-2025 00:06:32 27-Mar-2025 00:07:43 27-Mar-2025 00:09:43

Star Strider
Star Strider il 27 Mar 2025
Modificato: Star Strider il 27 Mar 2025
need to separate the elements of the array (that I changed to a cell array here).
Then, it works —
x = {'0:07.50' '2:03.91' '3:57.36' '5:09.44' '6:32.90' '7:43.03' '9:43.45'};
datetime(x,'InputFormat','m:ss.SS')
ans = 1x7 datetime array
27-Mar-2025 00:00:07 27-Mar-2025 00:02:03 27-Mar-2025 00:03:57 27-Mar-2025 00:05:09 27-Mar-2025 00:06:32 27-Mar-2025 00:07:43 27-Mar-2025 00:09:43
.
EDIT — (27 Mar 2025 at 21:13)
Use timeofday with seconds.
Perhaps this —
x = {'0:07.50' '2:03.91' '3:57.36' '5:09.44' '6:32.90' '7:43.03' '9:43.45'};
dt = datetime(x,'InputFormat','m:ss.SS')
dt = 1x7 datetime array
27-Mar-2025 00:00:07 27-Mar-2025 00:02:03 27-Mar-2025 00:03:57 27-Mar-2025 00:05:09 27-Mar-2025 00:06:32 27-Mar-2025 00:07:43 27-Mar-2025 00:09:43
dtm = seconds(timeofday(dt))
dtm = 1×7
7.5000 123.9100 237.3600 309.4400 392.9000 463.0300 583.4500
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
This works, and there may also be other ways of doing that conversion.
.

Rob
Rob il 27 Mar 2025
Modificato: Rob il 27 Mar 2025
I appreciate all the answers, and apologize for not just saying what I want to happen. I want to translate a string array
[ "0:07.50" "2:03.91" "3:57.36"]
into numbers
[0*60 + 7.5, 2*60 + 3.91, 3*60 + 57.36]
ans =
7.5000 123.9100 237.3600
For 3 elements in the string array, doing it manually is fine. But I have dozens.
  3 Commenti
Steven Lord
Steven Lord il 27 Mar 2025
Or you can create a duration instead of a datetime and avoid having to do the dateshift.
S = [ "0:07.50" "2:03.91" "3:57.36"];
DT = duration(S, "InputFormat", "mm:ss.SS")
DT = 1x3 duration array
00:00:07 00:02:03 00:03:57
D = seconds(DT)
D = 1×3
7.5000 123.9100 237.3600
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Walter Roberson
Walter Roberson il 27 Mar 2025
Ah, when I tested with duration, I missed that you need to use mm instead of m

Accedi per commentare.

Categorie

Scopri di più su Characters and Strings in Help Center e File Exchange

Tag

Prodotti


Release

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by