在MATLAB中格式化日期时间、日期字符串和数据时,分钟和月有两种不同的表示方式,分别为M和M或M和M。具体来说,当你用datestr时它和datetime是不同的。下面是一个例子,
startdate='01/05/2015 12:35:22';
startdt=datetime(startdate,'InputFormat','dd/MM/yyyy HH:mm:ss');
startstr=datestr(startdt,'dd/mm/yyyy HH:MM:SS');
查看datestr使用小写m表示月,datetime使用大写m表示月。
为什么MATLAB有不同的日期格式,适用于这些命令?在我的代码中实现一致风格的日期格式的最佳方法是什么?
在R2014b中,MathWorks引入了一套新的功能(基于datetime
类)来处理日期和时间,旨在作为datestr
, datenum
和datevec
等旧功能的改进替代品。
旧功能的一个问题是它没有使用标准格式字符串来描述日期和时间格式。新的功能可以正确地完成它,符合ISO 8601。它还适当地支持时区和区域设置、基于日历的持续时间和纳秒精度。
为了向后兼容,仍然保留了较旧的函数。在未来的一些MATLAB版本中,它们可能会逐渐被淘汰。通常的过程是,对于几个版本,他们会提出一个(可抑制的)警告,表明你可能想修改你的代码来使用更新的功能;然后在几个版本之后,它们会被删除(这最终会导致仍然使用它们的代码出错)。我建议如果你正在编写新代码,你完全坚持使用基于datetime
的功能。如果您正在修改现有的代码,请尽量保持选择的一致性,但在适当的时候逐渐将代码迁移到较新的功能。
编辑:从我写这个答案到现在已经七年了,你可以从MATLAB R2022b的发布说明中看出MathWorks开发人员的蜗牛般的步伐和胆小。尽管目前还没有"移除"的计划。函数,如
datestr
, datenum
和datevec
,它们现在不被正式推荐,MATLAB文档包括如何更新代码以替换为较新的datetime
的建议。
也许到R3099b,他们将有勇气真正删除它们,通过强迫他们使用好的风格来帮助他们的客户,并减少和加快产品的速度。来吧,伙计们,已经七年了现在-这不是在加快工程的步伐,而是在阻碍工程师。
这是Mathworks的一个非常普遍的问题,也是许多MATLAB程序员抱怨的问题:
Mathworks在不同版本之间不断更改一般内容
这是特别麻烦的,例如,当你突然必须处理大小写敏感(我想从2007年到2008年发生了?),或者当你突然在你的绘图中有新的定义颜色,非常不同的OOP处理(第一个OOP是一个噩梦)等。
对于你的问题:你提到的两个函数基本上都在做同样的事情,只是在非常不同的版本中引入。
- 2006年以前的日期
- 2014年以后的日期时间
所以我猜doctorlove的评论是正确的,Mathworks将这种格式更改为更类似于iso规范。即使在mathworks网站上,你也可以找到一个非常轻微的评论
注意:datetime接受的字母标识符与datestr、datenum和datevec函数使用的字母标识符不同。