MATLAB基础知识数据类型时间和⽇期⽇期和时间算术运算
本⽂演⽰了如何进⾏⽇期和时间值的加减运算,以此计算未来和过去的⽇期以及以精确单位或⽇历单位计量的流逝的持续时间。⽇期和时间数组可以进⾏加、减、乘、除运算,这些运算符的使⽤⽅法与其他 MATLAB 数据类型相同。但是,⽇期和时间存在⼀些特定⾏为。
为⽇期时间数组加上或减去⼀定的持续时间
创建⼀个⽇期时间标量。默认情况下,⽇期时间数组并未与时区关联。
t1 =datetime('now')
t1 = datetime
03-Aug-202020:35:07
为其加上时数序列以求得未来的时间点。
t2 = t1 +hours(1:3)
t2 =1x3 datetime
03-Aug-202021:35:0703-Aug-202022:35:0703-Aug-202023:35:07
验证 t2 中每⼀对⽇期时间值的差是否为 1 ⼩时。
dt =diff(t2)
dt =1x2 duration
01:00:0001:00:00
diff 返回由⼩时数、分钟数和秒数构成的精确持续时间。
从⽇期时间值减去分钟数序列以查过去的时间点。
t2 = t1 -minutes(20:10:40)
t2 =1x3 datetime
03-Aug-202020:15:0703-Aug-202020:05:0703-Aug-202019:55:07
将数值数组与 datetime 数组相加。MATLAB 将数值数组中的每个值视作 24 ⼩时⼀天的精确天数。
t2 = t1 +[1:3]
t2 =1x3 datetime
04-Aug-202020:35:0705-Aug-202020:35:0706-Aug-202020:35:07
包含时区的⽇期时间值加法
如要处理不同时区的⽇期时间值,或是要考虑夏令时更改,请使⽤关联了时区的⽇期时间数组。创建⼀个 datetime 标量,表⽰纽约时间2014 年 3 ⽉ 8 ⽇。
t1 =datetime(2014,3,8,0,0,0,'TimeZone','America/New_York')
t1 = datetime
08-Mar-2014
通过与天数序列(每⼀天固定 24 ⼩时)相加查未来时间点。
t2 = t1 +days(0:2)
t2 =1x3 datetime
08-Mar-201400:00:0009-Mar-201400:00:0010-Mar-201401:00:00
由于夏令时变化发⽣在 2014 年 3 ⽉ 9 ⽇,因此 t2 中的第三个⽇期时间不是在午夜。
验证 t2 中每⼀对⽇期时间值的差是否为 24 ⼩时。
dt =diff(t2)
dt =1x2 duration
24:00:0024:00:00
通过将⽇期时间值与 years、hours、minutes 和 seconds 等函数的输出结果相加,您还可以分别为其加上以年份、⼩时、分钟和秒等其他单位表⽰的固定长度持续时间。
如要考虑夏令时更改,则您应当⽤⽇历持续时间代替持续时间。将⽇期时间值与⽇历持续时间相加减时,⽇历持续时间会考虑夏令时变化。
将多个⽇历天与 t1 相加。
t3 = t1 +caldays(0:2)
t3 =1x3 datetime
08-Mar-201409-Mar-201410-Mar-2014
查看 t3 中每⼀对⽇期时间值之间的差并⾮始终为 24 ⼩时,这是因为夏令时变化发⽣在 3 ⽉ 9 ⽇。
dt =diff(t3)
dt =1x2 duration
24:00:0023:00:00
将⽇历持续时间与⽇期时间数组相加
将多个⽇历⽉与 2014 年 1 ⽉ 31 ⽇相加。
t1 =datetime(2014,1,31)
t1 = datetime
31-Jan-2014
t2 = t1 +calmonths(1:4)
t2 =1x4 datetime
28-Feb-201431-Mar-201430-Apr-201431-May-2014
t2 中的每个⽇期时间都出现在每个⽉的最后⼀天。
使⽤ caldiff 函数计算 t2 中每⼀对⽇期时间值在⽇历天数上的差值。
dt =caldiff(t2,'days')
dt =1x3 calendarDuration
31d 30d 31d
dt 中连续的⽇期时间值对之间相差的天数并⾮始终相同,这是因为不同的⽉份由不同的天数组成。
将多个⽇历年与 2014 年 1 ⽉ 31 ⽇相加。
t2 = t1 +calyears(0:4)
t2 =1x5 datetime
31-Jan-201431-Jan-201531-Jan-201631-Jan-201731-Jan-2018
使⽤ caldiff 函数计算 t2 中每⼀对⽇期时间值在⽇历天数上的差值。
dt =caldiff(t2,'days')
dt =1x4 calendarDuration
365d 365d 366d 365d
dt 中连续的⽇期时间值对之间相差天数并⾮始终相同,这是因为 2016 年是闰年,有 366 天。
您可以使⽤ calquarters、calweeks 和 caldays 函数创建⽇历季度、⽇历周或⽇历天数组,然后将其与⽇期时间数组相加或相减。
⽇历持续时间相加时不适⽤加法交换律。当您将⼀个以上的 calendarDuration 数组与⽇期时间值相加时,MATLAB® 会按其在命令中出现的顺序相加。
在 2014 年 1 ⽉ 31 ⽇基础上先加上 3 个⽇历⽉,再加上 30 个⽇历天。
t2 =datetime(2014,1,31)+calmonths(3)+caldays(30)
t2 = datetime
30-May-2014
对同⼀⽇期,先加上 30 个⽇历天,然后再加上 3 个⽇历⽉。所得到的结果并不相同,这是因为当您将⽇历持续时间与⽇期时间值相加时,加上的天数取决于原始⽇期。
t2 =datetime(2014,1,31)+caldays(30)+calmonths(3)
t2 = datetime
02-Jun-2014
diff函数⽇历持续时间算术运算
创建两个⽇历持续时间,然后对其求和。
d1 =calyears(1)+calmonths(2)+caldays(20)
d1 = calendarDuration
1y 2mo 20d
d2 =calmonths(11)+caldays(23)
d2 = calendarDuration
11mo 23d
d = d1 + d2
d = calendarDuration
2y 1mo 43d
当您求两个或更多⽇历持续时间之和时,⼤于 12 的⽉数将转进到年数。但是,较⼤的天数不会转进到⽉数,因为不同的⽉份由不同的天数组成。
⽤因⼦ 2 乘以 d 以增加其⼤⼩。⽇历持续时间的值必须是整数,因此只能⽤整数值与其相乘。
2*d
ans = calendarDuration
4y 2mo 86d
以精确单位计算流逝时间
将⼀个 datetime 数组与另⼀个相减,按精确的⼩时、分钟和秒数计算流逝的时间。
求出⽇期时间值序列与前⼀天起始时间之间的精确时长。
t2 =datetime('now')+caldays(1:3)
t2 =1x3 datetime
04-Aug-202020:35:0905-Aug-202020:35:0906-Aug-202020:35:09
t1 =datetime('yesterday')
t1 = datetime
02-Aug-2020
dt = t2 - t1
dt =1x3 duration
68:35:0992:35:09116:35:09
whos dt
Name Size Bytes Class Attributes
dt 1x3 40 duration
dt 以“时:分:秒”的格式存储持续时间。
通过更改 dt 的 Format 属性,以天为单位查看流逝的持续时间。
dt.Format ='d'
dt =1x3 duration
2.8578 days
3.8578 days
4.8578 days
⽤因⼦ 1.2 乘以 dt 以扩⼤持续时间的值。由于持续时间具有精确长度,您可以将其与⼩数值相乘和相除。
dt2 =1.2*dt
dt2 =1x3 duration
3.4293 days
4.6293 days
5.8293 days
以⽇历单位计算流逝时间
使⽤ between 函数求两个⽇期之间流逝的⽇历年、⽉和天数。
t1 =datetime('today')
t1 = datetime
03-Aug-2020
t2 = t1 +calmonths(0:2)+caldays(4)
t2 =1x3 datetime
07-Aug-202007-Sep-202007-Oct-2020
dt =between(t1,t2)
dt =1x3 calendarDuration
4d 1mo 4d 2mo 4d
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论