access日期如何增加年数_MATLAB的时间与日期

7 日期和时间

MATLAB在2014b版本中将日期和时间独立成了一个数据类型,新的版本中对于时间数据的处理功能更为强大。比如datetime和duration等函数,可以支持对时间的高效计算、对比、格式化显示。对这类数组的操作方法和对普通数组的操作是基本一致的。下面我们就对主要的功能进行介绍。

7.1 创建日期和时间数组

存储日期和时间信息的最主要形式就是datatime数组,它支持代数运算、排序、比较、绘图和格式化显示。代数运算的结果通过duration数组返回,如果采用基于日历的函数进行的计算,那么返回的结果将是calendarDuration数组。Matlab提供了以下函数来进行日期及时间类型的计算,请见表3-11 。

表3-11 日期和时间函数

函 数

说 明

函 数

说 明

datetime

基于当前日期创建时间数组,或者将日期字符串或数据转换为时间数组

yyyymmdd

将MATLAB datetime数据类型转化为YYYYMMDD数值格式

years

年数长度

minutes

分钟数长度

days

天数长度

seconds

秒数长度

hours

小时数长度

duration

由数值创建duration数组

calyears

日历年数长度

calweeks

日历星期数长度

calquarters

日历季度数长度

caldays

日历天数长度

calmonths

日历月数长度

calendarDuration

由数值创建日历时间长度数组

下面我们举例来说明如何创建日期和时间数组。

【例3-41】 日期时间数组创建。

例如,如果我们想要来表示这样两个日期:June 28, 2014 at 6 a.m和June 28, 2014 at 7 a.m,那么我们可以将这些数值相应的赋值给datetime函数各元素即可:

>> t = datetime(2014,6,28,6:7,0,0)

t =

28-Jun-2014 06:00:00 28-Jun-2014 07:00:00

如果想要对数组中的某一元素进行修改,那么只需要将新的数值赋值给相应的元素即可:

>> t.Day = 27:28

t =

27-Jun-2014 06:00:00 28-Jun-2014 07:00:00

如果想要更改数组的显示格式,只需要改变Format属性即可。这一过程中改变的只是数据显示格式,数据本身没有任何改动。

>> t.Format = 'MMM dd, yyyy'

t =

Jun 27, 2014 Jun 28, 2014

如果你要将一个datetime数组减去另一个datetime数组,那么结果就是duration数组:

>> t2 = datetime(2014,6,29,6,30,45)

t2 =

29-Jun-2014 06:30:45

>> d = t2 - t

d =

48:30:45 23:30:45

在默认情况下,duration数组显示格式是“hours:minutes:seconds”。通过设置Format属性,用户可以改变显示格式。例如可以改变为单一单位“小时”,具体操作如下:

>> d.Format = 'h'

d =

48.512 hrs 23.512 hrs

用户通过使用seconds、minutes、hours、days或 years函数,也可以直接创建一个新的单一单位的duration数值。例如,创建一个2天的天数长度,也就是正好等于24小时×2:

>> d = days(2)

d =

2 days

用户通过使用caldays、calweeks、calquarters和calyears函数,也可以直接创建一个新的单一单位的calendar duration数值。例如,创建一个2个月的日历天数长度:

>> L = calmonths(2)

L =

2mo

如果将一个calendar months 和一个calendar days数值相加,那么天数数值还将会分开显示,因为每个月的天数并不一致。除非是将其和一个具体的日期时间相加。

>> L = calmonths(2) + caldays(35)

L =

2mo 35d

将一个calendar durations和一个datetime数组相加:

>> t2 = t + calmonths(2) + caldays(35)

t2 =

Oct 01, 2014 Oct 02, 2014

此时得到的t2依然是一个datetime数组。

>> whos t2

Name Size Bytes Class Attributes

t2 1x2 161 datetime

总的来说,有多种方式来表达日期和时间,MATLAB对于每一种都提供了方法(如图3-7所示):

(1)表达时间点,使用datetime数据格式。例如Wednesday, June 18, 2014 10:00:00。

(2)表达一段时间的长度,采用固定时间长度单位,使用duration数据类型。在使用此种类型的时候,1天总是等于24小时的,一年总是等于365.2425天的。例如:72 小时10分钟。

(3)表达一段时间的长度,采用可变时间长度单位,使用calendarDuration数据类型。例如1个月可以是28、29、30或者31天。另外calendarDuration还考虑了夏令时和闰年,所以1天时间可以大于或者小于24小时,1年可以是365天或者366天。

59dea86cea8824f0a2b7d964c740a430.png

图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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值