抑制日期中不需要的空格

Suppressing unwanted spaces in dates

通过阅读其他地方的代码,我有一个名为 'time' 的日期矩阵,其中包含我想要删除的不需要的空格。

我试过 isspace 和 regexprep 都没有成功

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

我有大约 130000 个日期,格式如下:

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

等 'July' 的末尾到我要抑制的下一个破折号之间有两个空格:

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

将两个或更多空格替换为空:

>> time = {'04-July  -2017 09:54:30.000'
'04-July  -2017 09:54:31.000'}
>> regexprep(time,' {2,}','')

{'04-July-2017 09:54:30.000'}
{'04-July-2017 09:54:31.000'}

仅替换一个月后和破折号之前的两个空格 (-):

>> date = '04-July  -2017 09:54:30.000';
>> regexprep(date, '(\w)  -', '-')
ans =
    '04-July-2017 09:54:30.000'

除非您只是想更正您的输入文件供以后使用,否则您不一定需要更正输入。有几种方法可以直接用多余的空格解析时间:

time为:

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

然后直接将日期时间的字符串表示形式解析为 MATLAB 日期序列号,您可以使用:

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

matlabTime =
          736880.412858796
           736880.41287037

这种序列时间表示法不是人类可读的,但如果您想使用 date/time 进行计算,它是最快的方法。

如果您的目标只是更正字符串,那么您可以使用相同的技巧来读取值,并准确定义您想要的输出格式:

%% 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

如果要使用新的 datetime 对象,输入格式的语法略有不同,但操作大致相同:

%% 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

尽管 MATLAB 控制台以人类可读的格式显示 t,但 t 现在是一个 datetime 对象。如果要使用它,请查看文档。