购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 日期和时间

MATLAB将日期和时间独立成了一个数据类型,对于时间数据的处理功能更为强大。时间处理函数可以支持对时间的高效计算、对比、格式化显示。对时间数组的操作方法和对普通数组的操作基本一致,可以对日期和时间值执行加法、减法、排序、比较、串联和绘图等操作,还可以将日期和时间以数值数组或文本形式表示。

2.3.1 日期和时间的表示形式

在MATLAB中,可直接从系统中获取当前时间与日期,并以不同的形式直接显示出来。MATLAB提供了3种格式来表示日期与时间。

1.双精度型日期数字

一个日期型数字代表从公元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 的整数部分对应于日期,小数部分对应于一天中的时间。

2.不同形式的日期字符串

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'

3.数值型的日期向量

用一个六元数组表示一个日期时间,如[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

2.3.2 日期和时间的格式转换

用日期数字表示日期使计算机更容易计算,但是不直观,因此MATLAB提供了许多函数来实现3种日期格式之间的转化。

1.datestr函数

在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'

2.datenum函数

在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

3.datevec函数

在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

2.3.3 计时函数

在程序设计中,尤其是在数值计算的程序设计中,计时函数在可以对各种算法的执行效率起到决定性的作用。MATLAB中,计算函数的运行时间有以下3种方法。

1.cputime函数

在MATLAB中,cputime函数计算已用的CPU时间,该函数的调用格式及说明如表2-19所示。

表2-19 cputime函数调用格式及说明

例2-23: 测量已用的CPU时间。

MATLAB程序如下:

    >> clear       % 清除工作区的变量
    >> t=cputime;  % 返回MATLAB 自启动到调用cputime计算时使用的总CPU 时间
    t =
         187.4

2.tic函数

在MATLAB中,tic函数启动秒表计时器记录执行时的内部时间,该函数的调用格式及说明如表2-20所示。

表2-20 tic函数调用格式及说明

3.toc函数

在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                % 测量生成两个随机矩阵的时间

2.3.4 日期和时间函数的提取

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程序如下: PTf69FVQrdmKsl9tRhRnsTrQqYdFvIdfFX/zoZ6rlct4MVqrM3UbYwlPrPKu9QE5

    >> 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
点击中间区域
呼出菜单
上一章
目录
下一章
×