为什么在MATLAB R2011a中datestr('19 -01-2004')= 26-Jun-0024?

时间:2015-02-27 05:37:21

标签: matlab

我也尝试了以下内容:

datestr('19-01-2004','dd-mm-yyyy')

ans =

26-06-0024

我是MATLAB的新手,所以我不确定还有什么要检查。

2 个答案:

答案 0 :(得分:7)

在函数datestr()中,第二个参数表示输出的外观。它对输入没有任何说明。

基本上,您尝试执行两个步骤:解析字符串,然后再次格式化已解析的日期。

所以你可以做到

n = datenum('19-01-2004','dd-mm-yyyy')
datestr(n, 'yyyy-mm-dd')

您将获得n的731965,最终输出为2004-01-19

您也可以

v = datevec('19-01-2004','dd-mm-yyyy')
datestr(v, 'yyyy-mm-dd')

,您的v变为[2004 1 19 0 0 0]

请记住:第1步 - 使用适当的格式字符串解析输入,步骤2 - 使用所需格式字符串格式化输出。

如果你想在"清洁"和可读格式,你可以做到

v = [2004 1 19 0 0 0]
datestr(v, 'yyyy-mm-dd')
datestr(v, 'dd.mm.yyyy')
datestr(v, 'mm/dd/yyyy')

答案 1 :(得分:4)

使用datestr将日期字符串从一种形式转换为另一种形式时,输入日期字符串的格式限制为listed here。输入'19-01-2004'的格式为'dd-mm-yyyy',不是受支持的格式之一。

如果我们将输入字符串更改为'01/19/2004',这是支持的格式'mm/dd/yyyy',我们会得到正确的输出:

>> datestr('01/19/2004','dd-mm-yyyy')
ans =
19-01-2004

要绕过有限数量的受支持输入格式,请documentation recommends先使用datenum。因此,您可以将原始输入映射到自身,如:

>> datestr(datenum('19-01-2004','dd-mm-yyyy'),'dd-mm-yyyy')
ans =
19-01-2004

至于为什么MATLAB返回它与处理未知格式的方式有关的日期。 我怀疑他们用什么方法最终决定格式会产生一个非常小的日期数,因此是24年的输出。