How do I convert a string to a date?

1 369 views (last 30 days)
Joel Abrahams
Joel Abrahams on 17 Jul 2017
Commented: Amini on 3 Feb 2022
Currently I have the string:
2017-03-18 03:26:42.000000
I want to convert this to a date, and I use the following function:
datetime(my_string,'InputFormat','yyyy-mm-dd HH:MM:SS')
However, when I do this I get the following error:
Unable to parse '2017-03-18 03:26:42.000000' as a date/time using the format 'yyyy-mm-dd HH:MM:SS'.
I have also tried
datetime(my_string,'InputFormat','yyyy-mm-dd HH:MM:SSSSSSSSS')
datetime(my_string,'InputFormat','yyyy-mm-dd HH:MM:SS.SSSSSSS')
But none of these seem to work. How would I go about doing this?

Accepted Answer

Guillaume on 17 Jul 2017
Edited: Guillaume on 17 Jul 2017
Carefully read the documentation of the Format property. The month identifier is uppercase M and the minute identifier is lowercase m. The seconds field is lowercase s with the fractional part as uppercase S. So:
datetime(my_string,'InputFormat','yyyy-MM-dd HH:mm:ss.S')
if you want to display the fractional seconds by default:
datetime(my_string,'InputFormat','yyyy-MM-dd HH:mm:ss.S', 'Format', 'yyyy-MM-dd HH:mm:ss.SSS')
  1 Comment
Douglas Leaffer
Douglas Leaffer on 22 Jan 2022
The date and time vectors are the same length. I think perhaps the problem lies with the way the .txt file is imported. I have attached an excerpt of the file if you have bandwidth to suggest further help. The coumns of interest are date = column 7; time = column 8

Sign in to comment.

More Answers (1)

Rik on 17 Jul 2017
It is a bit confusing, but the capital S only denotes the fraction of a second, so not the second itself. The code below works.
my_string='2017-03-18 03:26:42.000000';
datetime(my_string,'InputFormat','yyyy-MM-dd HH:mm:ss.SSSSSS')
Amini on 3 Feb 2022
I found it how to eliminate the extra characters, using erase but still stacked with MONTH part

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!