任何人都可以告诉我为什么输入MATLAB
datestr('17-03-2016','dd-mmmm-yyyy')
我得到了
06-September-0022
答案 0 :(得分:5)
DateString = datestr(___,formatOut)使用formatOut指定输出文本的格式。您可以将formatOut与上述语法中的任何输入参数一起使用。
因此,在您的示例中,'dd-mmmm-yyyy'
指定了输出格式,而不是输入格式。
另外
DateString = datestr(DateStringIn)将DateStringIn转换为格式的文本,日 - 月 - 年小时:分:秒。 DateStringIn中表示的所有日期和时间必须具有相同的格式。
,其中
'dd-mm-yyyy'
在允许的DateStringIn
格式列表中 不 AND 文档明确建议使用{{ 1}}以确保正确的行为。 (注意:我在句子中强调错误的必须,第二个必须我想强调)
datenum
是官方正确的方法,直接来自文档。
最重要的是,请务必阅读文档。
答案 1 :(得分:3)
请改用:datestr(datenum('17-03-2016','dd-mmmm-yyyy'))
答案 2 :(得分:2)
要解决此问题中最后一个未解答的问题,为什么datenum
会表现得像这样?
>> datestr(datenum('17-03-2016'))
ans =
06-Sep-0022
如果没有明确告诉datestr
和datenum
应该如何处理输入,它会尝试匹配预期的格式。由于所记录的格式都不匹配(请参阅@dan的回答),因此失败。
虽然它接下来做的事情没有记录,至少在我们运行的任何版本的Matlab中,它都属于最后一个资源"试图给你一个日期号码。
Matlab将尝试从您的输入中解析不同的月份名称,删除非数字字符,然后从字符串中定时元素。在您的情况下,它们是17
,03
和2016
。第一个预计是月或年。由于没有第17个月,因此被视为年份。然后03
是月份,2016
就是那一天。
现在,2016年3月,17日不是一个有效的日期,但Matlab会给它一个松弛,并在1985年3月31日,17日之后阅读。这就是9月6日,22日。
因为Matlab的时间戳是自其纪元以来天数的浮点数,所以您可以使用有效日期触发该答案,如下所示:
>> datestr(datenum('0017-03-31') + 1985)
ans =
06-Sep-0022