到目前为止的日期字符

时间:2016-09-10 05:20:21

标签: excel matlab date datetime

我对Matlab很新,因此在导入数据方面存在一些问题。

我想导入GDP数据,然后将其绘制成时间。我能够导入它并转换为字符串日期。现在我想将它转换回我的目标Matrix。但是,我只是在目标矩阵中看到值48或49.

我的代码如下:

    AUSGDP = zeros(228,2);
    GDP = xlsread('AUDGDP.xlsx');
    GDP = GDP(1:228,1) + 693960;
    datestring = datestr(GDP,'mm/yyyy');
    AUSGDP(228,1) = datestring(228,1)

数据(xlsread('AUDGDP.xlsx')之后看起来像这样:

Date  | % Change
------|---------
21794 | 0
21885 | 1.300000
21976 | 1.500000
22068 | 1.400000

1 个答案:

答案 0 :(得分:0)

你得到48或49的原因是因为datestring(228,1),返回字符串中第一个字符的值。
“09/09”的第一个角色'是' 0'和' 0'值为48(ASCII格式)。

例:
s = '09/2016'
s(1)等于' 0' 转换为double:double(s(1))等于48。

我想你的意思是将月份作为数字(与字符串相对)。

一种方法是获得第二个字符,并将字符串转换为double(至数字):
s = '09/2016'
month_str = s(1:2); % month_str = '09'
month_num = str2num(month_str) %Convert string to number.

您可以使用datestr而不是使用datevec功能 datevec将日期和时间转换为组件的向量(所有组件都是数字,而不是字符串) datevec('09/2016', 'mm/yyyy')
返回:2016 9 1 0 0 0

如果您只需要月份,您可以使用:
[~, m, ~, ~, ~, ~] = datevec('09/2016', 'mm/yyyy')
结果是m = 9

在您的代码中,您可以按如下方式使用它:

AUSGDP = zeros(228,2);
GDP = xlsread('AUDGDP.xlsx');
GDP = GDP(1:228,1) + 693960;
datestring = datestr(GDP,'mm/yyyy');
%AUSGDP(228,1) = datestring(228,1)
[~, m, ~, ~, ~, ~] = datevec(datestring, 'mm/yyyy'); %m is months column as numbers.
AUSGDP(228,1) = m;