Timestamp in table not recognized as time value

Hello,
I have the following data time format in a table
'2020-08-03T20:40:00.000Z'
When I try to plot this data with another variable. I get the following message:
Error using scatter (line 54)
Input arguments must be numeric, datetime, duration or categorical.
I am aware that one can remove the T and the Z, in the following manner:
wtg_ref.Timestamp = strrep(wtg_ref.Timestamp, 'T', ' ');
wtg_ref.Timestamp = strrep(wtg_ref.Timestamp, 'Z', '');
However, that does and would not help either. It seems the value in the cell is not treated as time. A clue might be that the time value has quotation marks around it in the cells...
It would, of course be easier, to keep the T and Z in the format.
Support would be very much appreciated. Thank you.

1 Comment

I should mention, I also tried: time = datenum('2020-08-01T04:26:18.887Z','yyyy-mm-ddTHH:MM:SS.FFFZ');
But then I lose the milliseconds when I datestr(result)

Sign in to comment.

 Accepted Answer

It likel;y needs to be converted to a datetime array —
timestamp = '2020-08-03T20:40:00.000Z'
timestamp = '2020-08-03T20:40:00.000Z'
datetimestamp = datetime(timestamp, 'InputFormat','yyyy-MM-dd''T''HH:mm:ss.SSS''Z''', 'TimeZone','UTC')
datetimestamp = datetime
03-Aug-2020 20:40:00
The desired 'Format' and time zone in the code can be whatever you want.
datetimestamp.Format = 'yyyy-MMM-dd HH:mm:ss.SSS'
datetimestamp = datetime
2020-Aug-03 20:40:00.000
datetimestamp.TimeZone = 'UTC-7'
datetimestamp = datetime
2020-Aug-03 13:40:00.000
The actual format of the month and day are a bit ambiguous, so change those if they are not as I defined them in 'InputFormat'.
.

6 Comments

Malik
Malik on 31 Jan 2022
Edited: Malik on 31 Jan 2022
Hey Star Rider,
Thanks for coming to the rescue :-)
I am sorry, I can't manage to get the milliseconds with the above - It is probably me not following...
I have now tried the following as workaround:
old = '2020-08-03T20:40:00.111Z';
new = strrep(old, 'T', ' ');
new = strrep(new, 'Z', '')
time = datetime(new,'Format','yyyy-MM-dd HH:mm:ss.SSS')
And that gives the desired milliseconds
time = 2020-08-03 20:40:00.111
I would rather do it a more 'correct' or 'efficient' manner. If you could please advice.
Thanking you in anticipation.
I do not understand the problem you are having with my code.
Please do not use the strrep calls, since they are not necessary. The 'InputFormat' string I use in my code correctly interprets the ‘T’ and ‘Z’ and produces the correct conversion.
A one-line version of my code, adding a new value to ‘old’ to demonstrate that it works with column vectors:
old = {'2020-08-03T20:40:00.111Z'; '2020-08-03T20:40:01.123Z'};
time = datetime(old, 'InputFormat','yyyy-MM-dd''T''HH:mm:ss.SSS''Z''', 'TimeZone','UTC', 'Format','yyyy-MMM-dd HH:mm:ss.SSS')
time = 2×1 datetime array
2020-Aug-03 20:40:00.111 2020-Aug-03 20:40:01.123
It produces thae appropriate datetime values. (That does everything except the time zone conversion to a different time zone that I originally posted, and that is not absolutely necessary.)
.
Malik
Malik on 6 Feb 2022
Edited: Malik on 6 Feb 2022
Thank you Star Strider! You a star!
Apologies, for the delay in response to get back to this. Was fixing another bit of code!
As always, my pleasure! Thank you!
No worries! We all have lives outside of MATLAB Answers!
Star Strider is the man!
@Xiaoqi Davey — Thank you!!
A Vote would be appreciated!

Sign in to comment.

More Answers (0)

Categories

Products

Release

R2021b

Asked:

on 31 Jan 2022

Commented:

on 17 Feb 2023

Community Treasure Hunt

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

Start Hunting!