matlab 数值型日期的转换
我们在用 matlab 做计算时总是难免要对时间进行处理。可能有些人喜欢用 数字去表示时间,比如 20180910 这样的表示方法。当我们读取到这样的时间数据时该如何转换为 matlab 中的时间呢?
通过大家会想到以下的做法,把 20180910 中的年、月、日分别提取出来,像matlab中用 datevec
对时间进行分解一样,然后进行重组就 ok 了。这种方法的代码如下:
close all
clear
clc
% 方法一
daten = 20180910;
y = floor(daten/10000);
m = floor((daten - y*10000) / 100);
d = daten - y*10000 - m*100;
t1 = datetime(y,m,d);
这种方法的确可行,但是未免麻烦用了这么多行代码,在 matlab 中难道没有简洁的做法吗?当然是有的,datetime
函数奥妙无穷,我们可以这样做:
close all
clear
clc
daten = 20180910;
% 方法二
t2 = datetime(daten,'ConvertFrom','yyyymmdd');
t3 = datetime(daten,'ConvertFrom','yyyymmdd','format','yyyy-MM-dd');
方法二只用一行代码就实现了相同功能,至于 t2 和 t3 的差别,就在于一个是默认的datetime格式,另一个则使用了 format
进行指定。
一但我们将数据转换成了 datetime
格式,那么转换成 matlab 中的其他时间数据格式,datestr
datenum
之类就轻而易举了。
当然,这边还需要提醒一点,这里输入的 daten 是数值型,请确保数据输入是数值型,否则会出错,我之前经常在这点上犯错。
如果还有更好的方法,请不吝赐教。