MATLAB将日期和时间独立成了一个数据类型,对于时间数据的处理功能更为强大。时间处理函数可以支持对时间的高效计算、对比、格式化显示。对时间数组的操作方法和对普通数组的操作基本一致,可以对日期和时间值执行加法、减法、排序、比较、串联和绘图等操作,还可以将日期和时间以数值数组或文本形式表示。
在MATLAB中,可直接从系统中获取当前时间与日期,并以不同的形式直接显示出来。MATLAB提供了3种格式来表示日期与时间。
一个日期型数字代表从公元0年到某一日期的天数。例如,2020年1月1日0点被表示为737791,而这同一天的中午12点就被表示为737790.5。也就是说,任何一个时刻都可以用一个双精度型数字表示。
在MATLAB中,now函数根据系统时间计算并获取当前日期和时间,返回一个双精度型日期数字,该函数的调用格式及说明如表2-7所示。
表2-7 now函数调用格式及说明
例2-8: 显示当前时间。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> t = now % 以日期序列值的形式返回当前的日期和时间 t = 7.3793e+05 >> format long % 将输出格式设置为长固定十进制小数点格式 >> t = now % 返回当前的日期和时间 t = 7.379296186116436e+05
t 的整数部分对应于日期,小数部分对应于一天中的时间。
MATLAB定义了28种标准日期格式的字符串。
在MATLAB中,date函数根据系统时间计算并获取当前日期和时间,返回dd-mmm-yyyy格式的字符串,该函数的调用格式及说明如表2-8所示。
表2-8 date函数调用格式及说明
例2-9: 显示当前日期。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> d = date % 以 dd-MMM-yyyy 格式的字符向量形式返回当前日期 d = '18-May-2020'
用一个六元数组表示一个日期时间,如[2020 1 1 12 5 0]表示2020年1月1日12点05分0秒;用一个三元数组来表示一个日期,如[2020 1 1]表示2020年1月1日。
在MATLAB中,clock函数根据系统时间计算并获取当前时间和日期,并返回到一个六元数组中,该函数的调用格式及说明如表2-9所示。
表2-9 clock函数调用格式及说明
例2-10: 以科学记数法显示当前时间。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> T = clock % 以科学记数法显示当前日期和时间 T = 1.0e+03 * 2.0200 0.0040 0.0150 0.0150 0.0230 0.0580
直接输出clock时,默认以科学计数法的方式输出。若有需要,可以设置数组输出格式。
例2-11: 使用浮点值显示当前时间。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> format shortG % 使浮点值最多显示五位数字 >> c = clock % 显示当前日期和时间 c = 2020 4 15 15 25 11.139
例2-12: 显示当前时间。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> fix(clock) % 使用舍入为整数函数,输出易于阅读的形式 ans = 2020 4 15 15 28 25
为提高日期与时间的显示精度,MATLAB提供了特定的日期时间数组函数。
在MATLAB中,使用datetime函数可以创建表示时间点的数组,该函数的调用格式及说明如表2-10所示。
表2-10 datetime函数调用格式及说明
例2-13: 显示当前日期和时间。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> t = datetime('now') % 显示当前日期和时间 t = datetime 2020-04-15 15:40:15
例2-14: 转换当前日期和时间显示格式。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> format long % 将数字的输出显示更改为小数点固定十进制小数点格式 >> t = now % 以日期序列值形式返回当前日期和时间 t = 7.378966553958912e+05 >> d = datetime(t,'ConvertFrom','datenum') % 使用datetime函数转换时间显示格式 d = datetime 2020-04-15 15:43:46 >> t2 = floor(t) % 向负无穷大方向取整,获取时间t的整数部分,仅表示日期而不表示一天中的时间 t2 = 737896 >> d2 = datetime(t2,'ConvertFrom','datenum') % 使用datetime函数转换时间显示格式 d2 = datetime 2020-04-15
在MATLAB中,weekday函数用于显示当前时间为一个星期中的第几天,该函数的调用格式及说明如表2-11所示。
表2-11 weekday函数调用格式及说明
例2-15: 显示当前日期和星期缩写。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> t = date % 以格式字符串形式返回当前日期和时间 t = '15-Apr-2020' >> [d,w]=weekday(t) % 返回 DayName中星期几的数字与缩写英语名称 d = 4 w = 'Wed'
例2-16: 显示当前日期和星期的完整名称。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> t = now % 以双精度型日期数字形式返回当前日期和时间 t = 7.378966636626157e+05 >> [d,w]=weekday(t,'long') % 显示星期几的完整名称 d = 4 w = 'Wednesday'
在MATLAB中,eomday函数用于显示一个月的最后一天,该函数的调用格式及说明如表2-12所示。
表2-12 eomday函数调用格式及说明
例2-17: 显示指定月份最后一天的日期。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> eomday(2020,2) % 显示2020年2月的最后一天 ans = 29
例2-18: 显示2020年各个月份最后一天的日期。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> eomday(2020,1:12) % 显示2020年1~12月各月的最后一天 ans = 列 1 至 8 31 29 31 30 31 30 31 31 列 9 至 12 30 31 30 31
在MATLAB中,calendar函数用于显示指定月份的日,将针对指定的任何一个月生成一个日历并显示在命令行窗口中,或将其放在一个6×7的矩阵中。该函数的调用格式及说明如表2-13所示。
表2-13 calendar函数调用格式及说明
如果不指定输出参数,则calendar会在命令行窗口中显示日历但不返回值。
例2-19: 显示2020年3月的日历。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> calendar(2020,3) % 显示2020年3月的日历 Mar 2020 S M Tu W Th F S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 0 0 0 0 0 0 0 0 0 0 >> c=calendar(2020,3) % 以6×7 矩阵的形式返回2020年3月的日历 c = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0 0 0 0 0 0 0 0 0 0 0
用日期数字表示日期使计算机更容易计算,但是不直观,因此MATLAB提供了许多函数来实现3种日期格式之间的转化。
在MATLAB中,datestr函数可将日期数字和日期向量转化为日期字符串,该函数的调用格式及说明如表2-14所示。
表2-14 datestr函数调用格式及说明
例2-20: 将日期时间数组转换为日期字符串。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> t = [datetime('yesterday');datetime('now');datetime('tomorrow')] % 返回当前日期前一天、当前日期和当前日期后一天的日期字符串 t = 3×1 datetime 数组 2020-04-14 00:00:00 2020-04-15 16:42:08 2020-04-16 00:00:00 >> DateString = datestr(t) % 返回表示日期和时间的文本,格式为day-month-year hour:minute:second。 DateString = 3×20 char 数组 '14-Apr-2020 00:00:00' '15-Apr-2020 16:42:08' '16-Apr-2020 00:00:00'
在MATLAB中,datenum函数用于将日期字符串和日期向量转化为日期数字,该函数的调用格式及说明如表2-15所示。
表2-15 datenum函数调用格式及说明
表2-16 日期和时间的文本格式及示例
表2-17 构造formatIn字符向量的符号标识符
例2-21: 创建由日期数字构成的列向量。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> datenum(2020,[1 3; 2 4],eye(2,2)) % 创建由日期数字构成的列向量 ans = 737791 737850 737821 737882
在MATLAB中,datevec函数实现将日期数字和日期字符串转化为日期向量,该函数的调用格式及说明如表2-18所示。
表2-18 datevec函数调用格式及说明
例2-22: 将日期数字转换为日期向量。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> format shortG % 用短固定十进制小数点格式或科学记数法中更紧凑的一种格式输出,总共 5 位 >> n =now; % 将当前日期和时间的日期序列值赋值给n >> datevec(n) % 将当前日期时间n转换为日期向量,六个元素分别表示年、月、日、小时、分钟和秒分量 ans = 2020 4 15 16 46 30.914
在程序设计中,尤其是在数值计算的程序设计中,计时函数在可以对各种算法的执行效率起到决定性的作用。MATLAB中,计算函数的运行时间有以下3种方法。
在MATLAB中,cputime函数计算已用的CPU时间,该函数的调用格式及说明如表2-19所示。
表2-19 cputime函数调用格式及说明
例2-23: 测量已用的CPU时间。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> t=cputime; % 返回MATLAB 自启动到调用cputime计算时使用的总CPU 时间 t = 187.4
在MATLAB中,tic函数启动秒表计时器记录执行时的内部时间,该函数的调用格式及说明如表2-20所示。
表2-20 tic函数调用格式及说明
在MATLAB中,toc函数结束秒表计时器,从秒表读取已用时间,该函数的调用格式及说明如表2-21所示。
表2-21 toc函数调用格式及说明
例2-24: 测量生成两个随机矩阵的时间。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> tic % 启动秒表计时器 >> A = rand(120,44); % 生成随机矩阵A >> B = rand(120,44); % 生成随机矩阵B >> toc % 从启动的秒表计时器读取已用时间 >> C = A'.*B'; % 计算随机矩阵转置的逐元素乘积 >> toc % 测量生成两个随机矩阵的时间
MATLAB分别使用函数year、month、day、hour、minute、second从时间日期字符串和连续型日期时间值数组中提取年、月、日、时、分、秒等信息。
在MATLAB中,year函数用于获取日期时间值的年份数,该函数的调用格式及说明如表2-22所示。
表2-22 year函数调用格式及说明
例2-25: 显示当前年份。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >>[year(date),year(now)] % 分别返回字符向量形式和日期序列值形式的当前日期的年份 ans = 2020 2020 % 注意:上面的函数不能从向量型日期时间格式中正确读取上述信息。 >> year(clock) % 返回日期向量形式的当前日期和时间的年份 ans = 5 0 0 0 0 0
在MATLAB中,day函数用于获取日期时间值的日期数,该函数的调用格式及说明如表2-23所示。
表2-23 day函数调用格式及说明
表2-24 dayType指定的名称的类型
其余提取函数格式与年份数提取函数格式相同,这里不再赘述。
例2-26: 显示指定日期在年和月中的天数。
解 MATLAB程序如下:
>> clear % 清除工作区的变量 >> t = datetime(2020,1,1) % 创建一个日期时间值数组 t = datetime 2020-01-01 >> d = day(t,'name') % 返回完整的日期名称 d = 1×1 cell 数组 {'星期三'} >> d = day(t,'dayofweek') % 以数字形式返回指定日期是星期几 d = 4 >> d = day(t,'dayofyear') % 返回指定日期是所在年中的第几天 d = 1 >> d = day(t,'dayofmonth') % 返回指定日期是所在月中的第几天 d = 1