由于很多高频数据的日期和时间都是单独存放的字符串,即把日期放在一列,把时间放在一列,这时为了需要,需把日期和时间合并成一列,然后用matlab转化成数字型日期,具体作法有两种:
第一种:利用字符串连接法
第二种:利用数字型日期相加法
例子:现在有如下的字符型日期,需要转化为时间序列数字型向量
'04/22/2013' '9:00:00'
'04/22/2013' '9:01:00'
'04/22/2013' '9:02:00'
'04/22/2013' '9:03:00'
'04/22/2013' '9:04:00'
利用第一种方法:利用字符串连接法
先来介绍matlab中关于字符串连接的方法,在matlab中做字符串连接的函数有两个:
一、命令strcat(a,b,c...)
二、用括号[]
二者区别:
区别1:strcat中a,b,c……如果是数组的话,长度必须一致,a,b,c中可以有不标量字符串。而'[a,b]'必须是行数相同的数组或者但个字符串。
区别2:stract连接字符串之间没有空格,比如a与b之间没有空格,但是末尾可以有空格。而[]连接的两个字符串之间可以有空格。
区别3:如果a、b都是数组的话,比如都是一列等长度的数组,那么stract(a,b)为一列数组,长度于a和b相同,数组元素是把a、b中的对应字符串连接在了一起,而‘[a,b]’则是生成两列数组,第一列是a,第二列是b。
例子:
a1
=
'04/22/2013' '04/22/2013'
'04/22/2013'
'04/22/2013'
'04/22/2013'
b1 =
'9:00:00'
'9:01:00'
'9:02:00'
'9:03:00'
'9:04:00'
K>> [a1 b1]
ans =
'04/22/2013' '9:00:00'
'04/22/2013' '9:01:00'
'04/22/2013' '9:02:00'
'04/22/2013' '9:03:00'
'04/22/2013' '9:04:00'
注意:上面显然是两列数组字符串
strcat(a1,b1)
ans =
'04/22/20139:00:00'
'04/22/20139:01:00'
'04/22/20139:02:00'
'04/22/20139:03:00'
'04/22/20139:04:00'
K>> strcat(a1,b1,' /')
ans =
'04/22/20139:00:00 /'
'04/22/20139:01:00 /'
'04/22/20139:02:00 /'
'04/22/20139:03:00 /'
'04/22/20139:04:00 /'
K>> strcat(a1,' ',b1)
ans =
'04/22/20139:00:00'
'04/22/20139:01:00'
'04/22/20139:02:00'
'04/22/20139:03:00'
'04/22/20139:04:00'
注意:上面本意是要在日期和时间之间插入空格,显然strcat做不到。
在介绍过连接方法后,下一步需要把字符串连接起来,方法:
K>> c=strcat(a1,'/',b1)
c =
'04/22/2013/9:00:00'
'04/22/2013/9:01:00'
'04/22/2013/9:02:00'
'04/22/2013/9:03:00'
'04/22/2013/9:04:00'
在把上述的字符串数组转化为数字型日期:
K>> datenum(c)
ans =
7.3535e+05
7.3535e+05
7.3535e+05
7.3535e+05
7.3535e+05
第二种:利用数字型日期相加法(发现这种方法不可取,因为单独把字符型时间变成数值型时间,年月日是从最近的所在日的年的第一天开始的,发现第一个时间变成了01-Jan-2013
09:00:00,这时需要把日期起点设置为0,或者直接减去默认的那个日期,即相加后,再减去datenum(01-Jan-2013
),有兴趣的可以做下)
对分别把字符串日期和时间转化为数值型日期,然后相加:
K>>
aa=datenum(a1);
K>> bb=datenum(b1)
bb =
7.3524e+05
7.3524e+05
7.3524e+05
7.3524e+05
7.3524e+05
K>>
a+b
Undefined function 'plus' for input arguments of type 'cell'.
K>> datestr(bb)
ans =
01-Jan-2013
09:00:00
01-Jan-2013 09:01:00
01-Jan-2013 09:02:00
01-Jan-2013 09:03:00
01-Jan-2013 09:04:00
K>>
c=aa+bb
c =
1.4706e+06
1.4706e+06
1.4706e+06
1.4706e+06
1.4706e+06
K>>
datestr(c)
ans =
24-Apr-4026
09:00:00
24-Apr-4026 09:01:00
24-Apr-4026 09:02:00
24-Apr-4026 09:03:00
24-Apr-4026 09:04:00