MATLAB Answers

0

Problem with "datenum" and "datetime" functions

Asked by Peter Valent on 29 Apr 2019
Latest activity Commented on by Peter Valent on 30 Apr 2019
I need to extract date information from a formated date string. I have used both datenum and datetime functions but both of them returned an error. However, when I run the code on a different computer it worked well. Here is the simple code and the corresponding error:
Example for DATENUM:
datenum('11/02/2005 13:10:00','dd/mm/yyyy HH:MM:SS')
datenum('11/02/2005 13:10:00','dd/mm/yyyy HH:MM:SS')
Error: Invalid text character. Check for unsupported symbol,
invisible character, or pasting of non-ASCII characters.
Example for DATETIME:
datetime('11/02/2005 13:10:00','InputFormat','dd/MM/yyyy HH:mm:ss')
datetime('11.02.2005 13:10:00','InputFormat','dd.MM.yyyy HH:mm:ss')
Error: Invalid text character. Check for unsupported symbol,
invisible character, or pasting of non-ASCII characters.
Why don't the functions work on my computer?

  2 Comments

@Peter Valent: It might be a rogue non-ASCII character, e.g. a trailing special character that is not printed. Can you please click the paperclip button and upload a script that demonstrates this behavior. Please also tell us your OS and MATLAB version.
@Stephen Cobeldick: I think that no example script is neccesary. When I copy the two lines of code given in the question I get the error on one computer but no error at another one.
The specs of the PC where it throws error are: WIN10, MATLAB R2018b - academic use.
The specs of the PC where it does not throw error are: WIN10, MATLAB R2017a - academic use.
Moreover, the following code also doesn't work on the first PC and works on the second PC:
sscanf('10/10/10 10:10:10','%d/%d/%d %d:%d:%d')

Sign in to comment.

Products


Release

R2018b

1 Answer

Answer by Sean de Wolski
on 29 Apr 2019
 Accepted Answer

I was able to reproduce this by copying your code from above. It appears the opening ( is bad (right where the arrow is)
datetime('11/02/2005 13:10:00','InputFormat','dd/MM/yyyy HH:mm:ss')
Deleting your ( and replacing with my ( fixed it.
Further investigating it looks like there is an invisible character after the (
int32('(')
ans =
1×2 int32 row vector
40 65279

  1 Comment

I have addet the following check, which solved the problem.
textToConvert = '11/02/2005 13:10:00';
acceptedCharacters = int32([' ','.','/',int32(arrayfun(@num2str,0:9)),':']);
textToConvert = textToConvert(ismember(int32(textToConvert),acceptedCharacters));
datenum(textToConvert,'dd/mm/yyyy HH:MM:SS')

Sign in to comment.