图3-7选择需要导入的图像文件

【例3-42】  指定时区与相关计算。

在对日期和时间的计算中,MATLAB还提供了时区设置选项。这样我们只需在创建日期时间数组的时候指定好了时区,那么就可以在不同时区之间进行相关计算了,而不必人工换算中间有多少时差。下面我们就举例来说明如何来使用。

首先创建指定了时区的datetime数组:

>> t = datetime(2014,3,8:9,6,0,0,'TimeZone','local',...

'Format','d-MMM-y HH:mm:ss Z')

t =

8-Mar-2014 06:00:00 +0800   9-Mar-2014 06:00:00 +0800

在这里我们指定的是系统内部的时区设置'local',返回的结果中“+0800”一项就是我们所处的时区和Coordinated Universal Time之间的时差。

用户也可以指定时区:

>> t.TimeZone = 'Asia/Tokyo'

t =

8-Mar-2014 07:00:00 +0900   9-Mar-2014 07:00:00 +0900

同样的方式我们可以定义另一个伦敦时间:

>> u = datetime(2014,3,9,6,0,0,'TimeZone','Europe/London',...

'Format','d-MMM-y HH:mm:ss Z')

u =

9-Mar-2014 06:00:00 +0000

两个时间相减,就可以得到两个时间点相差的实际时间:

>> dt = t - u

dt =

-32:00:00    -8:00:00

【例3-43】  日期和时间序列的产生。

本例将来为读者演示如何通过使用冒号(:)来产生日期和时间序列。

采用默认步长来产生序列,默认步长为1个日历天。

>> t1 = datetime('01-Nov-2013 08:00:00');

t2 = datetime('05-Nov-2013 08:00:00');

t = t1:t2

t =

Columns 1 through 3

01-Nov-2013 08:00:00   02-Nov-2013 08:00:00   03-Nov-2013 08:00:00

Columns 4 through 5

04-Nov-2013 08:00:00   05-Nov-2013 08:00:00

用户还可以指定步长:

>> t = t1:caldays(2):t2%使用caldays函数来指定2个日历天为步长

t =

01-Nov-2013 08:00:00   03-Nov-2013 08:00:00   05-Nov-2013 08:00:00

>>t = t1:hours(18):t2% 使用18个小时作为步长

t =

Columns 1 through 3

01-Nov-2013 08:00:00   02-Nov-2013 02:00:00   02-Nov-2013 20:00:00

Columns 4 through 6

03-Nov-2013 14:00:00   04-Nov-2013 08:00:00   05-Nov-2013 02:00:00

通过指定时区为纽约时间,t1所对应时间正好在夏令时之前。

>> t1.TimeZone = 'America/New_York';

>> t2.TimeZone = 'America/New_York';

如果用户这时使用1个日历天为步长,那么这两个时间点之间每天的时间长度并不都是24小时:

>> t = t1:t2;

>> dt = diff(t)

dt =

24:00:00   25:00:00   24:00:00   24:00:00

如果将步长设置为固定长度的1天:

>> t = t1:days(1):t2

t =

Columns 1 through 3

01-Nov-2013 08:00:00   02-Nov-2013 08:00:00   03-Nov-2013 07:00:00

Columns 4 through 5

04-Nov-2013 07:00:00   05-Nov-2013 07:00:00

这时我们可以验证各时间点之间的长度是否都等于24小时:

>> dt = diff(t)

dt =

24:00:00   24:00:00   24:00:00   24:00:00

【例3-44】  日期和时间序列的计算。

日期和时间序列可以像数组那样进行加减。

首先我们创建一个日期时间点:

>> t1 = datetime('01-Nov-2013 08:00:00');

然后讲一个固定长度小时数组加到这一个时间点上:

>> t = t1 + hours(0:2)

t =

01-Nov-2013 08:00:00   01-Nov-2013 09:00:00   01-Nov-2013 10:00:00

我们还可以加上一个日历月份时间长度:

>> t = t1 + calmonths(1:5)

t =

Columns 1 through 3

01-Dec-2013 08:00:00   01-Jan-2014 08:00:00   01-Feb-2014 08:00:00

Columns 4 through 5

01-Mar-2014 08:00:00   01-Apr-2014 08:00:00

上面结果中的每一个时间点都是当月的第一天。如果我们要计算数组时间点之间的相隔天数,我们可以使用以下命令:

>> dt = caldiff(t,'days')

dt =

31d   31d   28d   31d

如果要产生一个每月最后一天的日期序列,可以通过如下方法:

>> t = datetime('31-Jan-2014') + calmonths(0:11)

t =

Columns 1 through 5

31-Jan-2014   28-Feb-2014   31-Mar-2014   30-Apr-2014   31-May-2014

Columns 6 through 10

30-Jun-2014   31-Jul-2014   31-Aug-2014   30-Sep-2014   31-Oct-2014

Columns 11 through 12

30-Nov-2014   31-Dec-2014