使用datestr转换日期的意外结果

时间:2016-06-22 09:54:07

标签: matlab

任何人都可以告诉我为什么输入MATLAB

datestr('17-03-2016','dd-mmmm-yyyy')

我得到了

06-September-0022

3 个答案:

答案 0 :(得分:5)

来自datestr docs

  

DateString = datestr(___,formatOut)使用formatOut指定输出文本的格式。您可以将formatOut与上述语法中的任何输入参数一起使用。

因此,在您的示例中,'dd-mmmm-yyyy'指定了输出格式,而不是输入格式。

另外

  

DateString = datestr(DateStringIn)将DateStringIn转换为格式的文本,日 - 月 - 年小时:分:秒。 DateStringIn中表示的所有日期和时间必须具有相同的格式。

,其中

enter image description here

'dd-mm-yyyy'在允许的DateStringIn格式列表中 AND 文档明确建议使用{{ 1}}以确保正确的行为。 (注意:我在句子中强调错误的必须,第二个必须我想强调)

Sandar_Usama's回答

datenum

是官方正确的方法,直接来自文档。

最重要的是,请务必阅读文档。

答案 1 :(得分:3)

请改用:datestr(datenum('17-03-2016','dd-mmmm-yyyy'))

答案 2 :(得分:2)

要解决此问题中最后一个未解答的问题,为什么datenum会表现得像这样?

>> datestr(datenum('17-03-2016'))

ans =

06-Sep-0022

如果没有明确告诉datestrdatenum应该如何处理输入,它会尝试匹配预期的格式。由于所记录的格式都不匹配(请参阅@dan的回答),因此失败。

虽然它接下来做的事情没有记录,至少在我们运行的任何版本的Matlab中,它都属于最后一个资源"试图给你一个日期号码。

Matlab将尝试从您的输入中解析不同的月份名称,删除非数字字符,然后从字符串中定时元素。在您的情况下,它们是17032016。第一个预计是月或年。由于没有第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