Search code examples
matlabdatespaces

Suppressing unwanted spaces in dates


From reading code from elsewhere, I have a matrix of dates called 'time' that have unwanted spaces that I want removed.

I've tried isspace and regexprep with no luck

time = regexprep(time, '\W', '');

I have about 130000 dates with the following format:

04-July  -2017 09:54:30.000
04-July  -2017 09:54:31.000

etc There are two spaces between the end of 'July' to the next dash I want to suppress to:

04-July-2017 09:54:30.000
04-July-2017 09:54:31.000

Solution

  • Unless you just want to correct your input file for later usage, you do not necessarily need to correct the input. There are several ways to parse the time directly with the extra spaces:

    Let time be:

    time = ['04-July  -2017 09:54:31.000';
            '04-July  -2017 09:54:32.000']
    

    Then to directly parse the string representation of the datetime into a MATLAB date serial number you can use:

    %% get date in [MATLAB date serial number]
    formatIn  = 'dd-mmm  -yyyy HH:MM:SS.FFF' ;
    matlabTime = datenum(time,formatIn)
    
    matlabTime =
              736880.412858796
               736880.41287037
    

    This serial time representation is not so human readable but it's the fastest thing you can get if you want to do calculations with date/time.

    If your goal is simply to correct the string, then you can use the same trick to read the value in, and define exactly which output format you want out:

    %% get date in [string]
    formatIn  = 'dd-mmm  -yyyy HH:MM:SS.FFF' ;
    formatOut = 'dd-mmm-yyyy HH:MM:SS.FFF' ;
    
    stringTime = datestr(datenum(time,formatIn),formatOut)
    
    stringTime =
    04-Jul-2017 09:54:31.000
    04-Jul-2017 09:54:32.000
    

    If you want to use the new datetime objects, the input format has a slight different syntax but the operation is roughly the same:

    %% get date in [datetime] objects
    formatIn  = 'dd-MMM  -yyyy HH:mm:ss.SSS' ;
    t = datetime(time,'InputFormat',formatIn)
    
    t = 
       04-Jul-2017 09:54:31
       04-Jul-2017 09:54:32
    

    Although the MATLAB console display t in human readable format, t is now a datetime object. Check the documentation if you want to use this.