Not able to convert array to datetime, help, please!

I have this table imported from a csv file after using
datos = readtable(filename)
fechaDef = datos{:,{'FECHA_DEF'}}
fechaDef =
{'9999-99-99'}
{'6/26/2020' }
{'9999-99-99'}
{'9999-99-99'}
{'9999-99-99'}
....
And i want to convert it to datetime format, i want to have the '9999-99-99' as NaT
What I'm doing is
fechaDef = datos{:,{'FECHA_DEF'}} %NaT if not a Datetime
fechaDef = table2array(fechaDef);
fechaDef = datetime(fechaDef,'InputFormat','MM/dd/yyyy')
I can write those commands and execute them successully at the command window.
But when writing them in a script i get the following error:
Can you tell me what am I doing wrong?
Thanks in advance!

3 Comments

Not without a sample test case that illustrates the problem can run here -- the above code snippet by itself works in a script the same as the command line
>> testit
fechadef =
5×1 datetime array
NaT
26-Jun-2020
NaT
NaT
NaT
>>
>> type testit
fechaDef = [...
{'9999-99-99'}
{'6/26/2020' }
{'9999-99-99'}
{'9999-99-99'}
{'9999-99-99'}];
fechadef=datetime(fechaDef,'InputFormat','MM/dd/yyyy')
>>
There's something else gone wrong in the script before there that is the cause of the problem but we can't see or run the script to be able to tell what that might be.
Pull out the pieces and make test code by adding more and more until you find the culprit...
Thanks for your fast answer dpb.
Attached you can find my script, in fact i'm getting a warning but dont know if that is related with the error.
Also attached is the .csv file i'm using.
data = cat(1, image_patches,labels);
That code is overwriting all of data each iteration.
It looks to me as if data will not be a vector, but I do not seem to be able to locate any hellopatches() function so I cannot tell what shape it will be. As you are not doing imresize() I also cannot be sure that all of the images are the same size, so I cannot be sure that data will be the same size for each iteration. Under the circumstances you should be considering saving into a cell array.
Note: please do not post the same query multiple times. I found at least 9 copies of your query :(

Sign in to comment.

 Accepted Answer

fechaDef = ...
[{'9999-99-99'};
{'6/26/2020' };
{'9999-99-99'};
{'9999-99-99'};
{'9999-99-99'}]
fechaDef2 = replace(fechaDef, '9999-99-99', 'NaT')
dt = datetime(fechaDef2, 'InputFormat', 'MM/dd/yyyy')

2 Comments

Absolutetly right, replace was the function i was missing, thank you Steven!
So what's the difference that DVR was finding, Steven?
Why isn't datetime returning NaT on its own (presuming it really is failing)?
That seems like retrogression if is newly-introduced behavior since R2019b which works as expected here, anyways.
I was more expecting it to barf on the "MM" format string with a '6/26/2020' datestring but it seems ok with that now. My recollection is that would fail in earlier releases but I didn't go back to try to test.

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2019b

Asked:

DVR
on 15 Jul 2020

Commented:

on 15 Jul 2020

Community Treasure Hunt

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

Start Hunting!