Matlab中datetime构造函数InputFormat反向转换及datestr失效问题
解决Matlab中datetime与datestr格式双向匹配问题
这个坑我之前也踩过!问题根源出在datestr是Matlab里的旧函数,它用的格式标识符和datetime类的不兼容——你用的yyyy/MM/dd-HH:mm,在datetime里MM代表月份、mm代表分钟,但到了datestr里刚好反过来:mm才是月份,MM是分钟,这就导致月份和分钟被搞混了。
要实现同一格式字符串双向转换,完全不需要硬编码,更不用迁就旧的datestr,直接用datetime类的原生方法就搞定了:
方法一:给datetime对象指定统一的Format属性
创建datetime对象时,同时把Format属性设为你想要的格式(和InputFormat一致),这样后续直接转字符串就自动用这个格式,根本不用datestr:
% 定义统一的格式字符串 formatStr = 'yyyy/MM/dd-HH:mm'; % 创建datetime时同时指定InputFormat和Format startTime = datetime('2014/06/01-00:00', ... 'InputFormat', formatStr, ... 'Format', formatStr); % 直接转字符串,格式完全匹配 strStartTime = string(startTime); % 或者 strStartTime = char(startTime);
运行后strStartTime就是"2014/06/01-00:00",完美对应输入格式。
方法二:如果非要用datestr(不推荐)
如果你因为某些原因必须用datestr,那需要把格式字符串里的标识符做适配——把MM(月份)换成mm,把mm(分钟)换成MM:
formatStr = 'yyyy/MM/dd-HH:mm'; % 转换为datestr兼容的格式 datestrFormat = strrep(strrep(formatStr, 'MM', 'XX'), 'mm', 'MM'); datestrFormat = strrep(datestrFormat, 'XX', 'mm'); startTime = datetime('2014/06/01-00:00', 'InputFormat', formatStr); strStartTime = datestr(startTime, datestrFormat);
不过还是强烈推荐方法一,因为datestr已经被Matlab标记为不推荐使用的函数,官方建议用datetime的string/char方法或者format函数来替代。
额外提示
如果你已经有一个datetime对象,想要临时用指定格式输出,也可以直接用format函数:
startTime = datetime('2014/06/01-00:00', 'InputFormat', 'yyyy/MM/dd-HH:mm'); strStartTime = format(startTime, 'yyyy/MM/dd-HH:mm');
这样也能得到正确的格式字符串,而且完全不用依赖旧的datestr。
内容的提问来源于stack exchange,提问作者Dims
相关产品推荐
相关产品推荐

