【问题标题】:Date string to date日期字符串到日期
【发布时间】:2016-09-10 05:20:21
【问题描述】:

我对 Matlab 比较陌生,因此在导入数据方面遇到了一些问题。

我想导入 GDP 数据,然后将其绘制到时间上。我能够将其导入并转换为字符串日期。现在我想将它转换回我的目标矩阵。但是,我只在目标矩阵中看到值 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

【问题讨论】:

  • 你能发布一个可执行的例子吗? (将GDP = xlsread('AUDGDP.xlsx'); 替换为已读取的一些数据(例如GDP(1) = 123; GDP(2) = 456;...)。
  • 我会在上面编辑它

标签: excel matlab date datetime


【解决方案1】:

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

示例:
s = '09/2016'
s(1) 等于“0”。
转换为双精度:double(s(1)) 等于 48。

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

一种方法是获取拳头两个字符,并将字符串转换为双精度(转为数字):
s = '09/2016'
month_str = s(1:2); % month_str = '09'
month_num = str2num(month_str) %Convert string to number.

您可以使用datevec,而不是使用datestr 函数。
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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多