Could not recognize the format of the date/time text

14 views (last 30 days)
I have a timetable with a time column containing microsecond resolution. The time column contains something like this:
"07/04/2021 07:55:27.502.118"
"07/04/2021 07:55:27.502.196"
"07/04/2021 07:55:27.502.274"
"07/04/2021 07:55:27.502.352"
"07/04/2021 07:55:27.502.430"
"07/04/2021 07:55:27.502.508"
How can i process the data using datetime function?

Accepted Answer

Stephen23
Stephen23 on 4 Oct 2022
C = ["07/04/2021 07:55:27.502.118"
"07/04/2021 07:55:27.502.196"
"07/04/2021 07:55:27.502.274"
"07/04/2021 07:55:27.502.352"
"07/04/2021 07:55:27.502.430"
"07/04/2021 07:55:27.502.508"];
D = datetime(regexprep(C,'\.(\d+)$','$1'), 'InputFormat','d/M/y H:m:s.SSSSSS');
Checking:
D.Format = 'MM/dd/yyyy HH:mm:ss.SSSSSS'
D = 6×1 datetime array
04/07/2021 07:55:27.502117 04/07/2021 07:55:27.502196 04/07/2021 07:55:27.502274 04/07/2021 07:55:27.502352 04/07/2021 07:55:27.502430 04/07/2021 07:55:27.502507

More Answers (1)

Eric Delgado
Eric Delgado on 4 Oct 2022
You can't. The precision of datetime is milliseconds, but you can use regexp.
inData = "07/04/2021 07:55:27.502.118";
regData = regexp(inData, '(?<timestamp_ms>\d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2}.\d{3}).(?<us>\d*)', 'names')
regData = struct with fields:
timestamp_ms: "07/04/2021 07:55:27.502" us: "118"
outData = datetime(regData.timestamp_ms, 'InputFormat', 'dd/MM/yyyy HH:mm:ss.SSSSSS') + seconds(str2double(regData.us)/1e+6)
outData = datetime
07-Apr-2021 07:55:27
format long
second(outData)
ans =
27.502117999999999
  2 Comments
Eric Sofen
Eric Sofen on 4 Oct 2022
To be clear, datetime supports more than milliseconds. In fact, datetime guarantees at least nanosecond precision.

Sign in to comment.

Categories

Find more on Dates and Time in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!