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

Malik
Malik 2022년 1월 31일
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)

댓글을 달려면 로그인하십시오.

 채택된 답변

Star Strider
Star Strider 2022년 1월 31일
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

Malik
Malik 2022년 1월 31일
편집: Malik 2022년 1월 31일
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 2022년 2월 6일
편집: Malik 2022년 2월 6일
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!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Time Series Events에 대해 자세히 알아보기

제품

릴리스

R2021b

질문:

2022년 1월 31일

댓글:

2023년 2월 17일

Community Treasure Hunt

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

Start Hunting!

Translated by