You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:40:23