Timestamp in ISO 8601 to yyyy-MM-dd HH:mm:ss
54 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hey there!
I am trying to parse the ISO8601 timestamp into readible format like 'yyyy-MM-dd HH:mm:ss'
However, no matter how hard I try, I couldn't be able to do the conversion.
I keep getting the message which reads "
>>> datetime('0000-00-00T14:26:21:000','InputFormat','yyyy-MM-dd''T''HH:mm:ss')
Error using datetime
Unable to convert '0000-00-00T14:26:21:000' to datetime using the format 'yyyy-MM-dd'T'HH:mm:ss'.
Can anyone please tell me what I am doing incorrectly in the syntax ?
5 Kommentare
Akzeptierte Antwort
dpb
am 12 Okt. 2022
Bearbeitet: dpb
am 12 Okt. 2022
It's a pit(proverbial)a(ppendage) when vendor code produces nonstandard formats...
S='0000-00-00T14:26:21:000'; % sample date string
datetime(extractAfter(S,'T'),'InputFormat','HH:mm:ss:SSS','Format',"HH:mm:ss.SSS")
converts the time portion with the behavior of datetime with a missing date to default to the current date.
Unfortunately, the limitations of what TMW has implemented for the duration class formats wipes out that as an alternative...
duration(extractAfter(S,'T'),'InputFormat','hh:mm:ss:SSS')
datetime is more forgiving in letting the additional ":" pass when given as part of the format string; for some reason the developers didn't provide duration the same level of customization.
2 Kommentare
dpb
am 12 Okt. 2022
S='0000-00-00T14:26:21:000'; % sample date string
timeofday(datetime(extractAfter(S,'T'),'InputFormat','HH:mm:ss:SSS'))
returns a duration to wipe out the funky date portion.
Weitere Antworten (1)
Cris LaPierre
am 12 Okt. 2022
Bearbeitet: Cris LaPierre
am 12 Okt. 2022
I would follow this example: Date and Time from Text with Literal Characters
DateStrings = {'2014-05-26T13:30-05:00';'2014-08-26T13:30-04:00';'2014-09-26T13:30Z'}
t = datetime(DateStrings,'InputFormat','uuuu-MM-dd''T''HH:mmXXX','TimeZone','UTC')
Your data is returning an error because the month-day data are zeros, which violates the ISO8601 date format spec:
- [MM] indicates a two-digit month of the year, 01 through 12.
- [DD] indicates a two-digit day of that month, 01 through 31.
3 Kommentare
Cris LaPierre
am 12 Okt. 2022
Me either. I think your answer is the best you can do.
XXX is for capturing timezone (in the example, the timezone is in the format -5:00), but the OP's data does not have timezone. In that case, your first option is the correct approach.
t=timeofday(datetime('0000-00-00T14:26:21:000','InputFormat','''0000-00-00T''HH:mm:ss:SSS'))
Main point - this is not an ISO 8601 date. If it were, datetime could import it.
dpb
am 12 Okt. 2022
OK, thanks...I misinterpreted your "I would follow..." as saying it should work somehow.
I always forget about the "XXX" being part of the formatting string set; the doc for datetime is pretty disjointed in that it takes several jumps to get to the full table of possible formatting strings from the abbreviated list at the input description don't always go there.
Siehe auch
Kategorien
Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!