抑制日期中不需要的空格
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 对象。如果要使用它,请查看文档。
通过阅读其他地方的代码,我有一个名为 '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 对象。如果要使用它,请查看文档。