北京网站建设服务器维护,网站模板下载后怎么用,北京做网站建设公司,网站建设煊煊网7 日期和时间MATLAB在2014b版本中将日期和时间独立成了一个数据类型#xff0c;新的版本中对于时间数据的处理功能更为强大。比如datetime和duration等函数#xff0c;可以支持对时间的高效计算、对比、格式化显示。对这类数组的操作方法和对普通数组的操作是基本一致的。下… 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:28t 27-Jun-2014 06:00:00 28-Jun-2014 07:00:00如果想要更改数组的显示格式只需要改变Format属性即可。这一过程中改变的只是数据显示格式数据本身没有任何改动。 t.Format MMM dd, yyyyt 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 - td 48:30:45 23:30:45在默认情况下duration数组显示格式是“hours:minutes:seconds”。通过设置Format属性用户可以改变显示格式。例如可以改变为单一单位“小时”具体操作如下 d.Format hd 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天。图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/Tokyot 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 - udt -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:t2t Columns 1 through 3 01-Nov-2013 08:00:00 02-Nov-2013 08:00:00 03-Nov-2013 08:00:00Columns 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:00t 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:00Columns 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):t2t Columns 1 through 3 01-Nov-2013 08:00:00 02-Nov-2013 08:00:00 03-Nov-2013 07:00:00Columns 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:00Columns 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-2014Columns 6 through 10 30-Jun-2014 31-Jul-2014 31-Aug-2014 30-Sep-2014 31-Oct-2014Columns 11 through 12 30-Nov-2014 31-Dec-2014