Main Content

isregular

确定输入时间基于时间单位或日历单位是否规则

说明

示例

如果 D 基于时间是规则的,则 tf = isregular(D) 返回 1 (true)。否则,将返回 0 (false)。如果输入 D 的时间序列是严格单调的(递增或递减),并且具有唯一时间步,则该输入是规则的。

输入参数 D 可以为:

  • datetime 向量。

  • duration 向量。

  • 时间表。如果时间表的行时间向量是规则的,则时间表就是规则的。

此语法等效于 isregular(D,'time')

示例

tf = isregular(D,timeUnit) 确定 D 基于指定的时间或日历单位是否为规则的。

例如,D 基于月份可能是规则的,但相对于确切的历时可能是不规则的,因为不同月份可以有不同天数。要确定 D 基于月份是否为规则的,请将 timeUnit 指定为 'months'

示例

[tf,dt] = isregular(___) 返回 dt,即连续时间之间的时间步。如果 D 是规则的,则 dtduration 值或 calendarDuration 值。如果 D 不是规则时间,则 dtNaN 值。

示例

全部折叠

使用 seconds 函数创建一个 duration 向量。

D = seconds(1:5)
D = 1x5 duration
   1 sec   2 sec   3 sec   4 sec   5 sec

使用 isregular 函数测试 DD 是规则的,因为连续元素之间的时间间隔始终相同。

tf = isregular(D)
tf = logical
   1

更改 D 的最后一个元素。

D(end) = seconds(10)
D = 1x5 duration
    1 sec    2 sec    3 sec    4 sec   10 sec

D 不再是规则的。

tf = isregular(D)
tf = logical
   0

使用月份 datetime 向量创建时间表。确定时间表是否基于时间规则,然后是否按基于月规则。

首先,创建一个时间表,其行时间是 2016 年的前五个月,存储为 datetime 值。添加每月的股票价格作为时间表变量。

StockPrice = [109.0;107.82;113.17;128.01;116];
M = timetable(datetime(2016,1:5,3)',StockPrice)
M=5×1 timetable
       Time        StockPrice
    ___________    __________

    03-Jan-2016         109  
    03-Feb-2016      107.82  
    03-Mar-2016      113.17  
    03-Apr-2016      128.01  
    03-May-2016         116  

确定 M 是否为规则时间表。

tf = isregular(M)
tf = logical
   0

M 基于时间是不规则的,因为前五个月的天数不同。因此,连续行时间之间的确切时间量因行而异。您可以使用 diff 函数来计算 M 中连续时间之间的时间步差。差为 duration 值,以小时、分钟和秒的格式显示时间步。

T = diff(M.Time)
T = 4x1 duration
   744:00:00
   696:00:00
   744:00:00
   720:00:00

M 基于月份是规则的,因为 M 的行时间之间的时间间隔始终为一个日历月。

tf = isregular(M,'months')
tf = logical
   1

创建一个时间表。确定它是否为规则时间表,如果是,则返回时间步的大小。

Time = [minutes(0):minutes(15):minutes(60)]';
Pulse = [72 75 80 73 69]';
TT = timetable(Time,Pulse)
TT=5×1 timetable
     Time     Pulse
    ______    _____

    0 min      72  
    15 min     75  
    30 min     80  
    45 min     73  
    60 min     69  

[TF,dt] = isregular(TT)
TF = logical
   1

dt = duration
   15 min

TT 是规则时间表。

输入参数

全部折叠

输入变量,指定为时间表、datetime 向量或 duration 向量。

时间或日历单位,指定为字符向量或字符串标量。isregular 确定 D 的连续时间基于 timeUnit 所指定的时间或日历单位是否是规则的。下表列出了您可以指定的单位。

时间或日历单位

描述

'years'

按年规则变化

'quarters'

按季度规则变化

'months'

按月规则变化

'weeks'

按周规则变化

'days'

按日规则变化

'time'(默认值)

按时间规则变化

  • 如果 D 是行时间为 datetime 值的 datetime 向量或时间表,则时间步基于日历单位(例如,月)可能是规则的,但关于确切的历时可能是不规则的。

    例如,如果时间关于每月的 datetime 值是规则的,而 timeUnit'month',则 isregular 返回 1。但是,如果 timeUnit'time',则 isregular 返回 0,因为不同月份表示不同时间长度。

  • 如果 D 是行时间为 duration 值的 duration 向量或时间表,请将 timeUnit 指定为 'time' 或使用第一种语法。duration 数据类型不使用日历单位表示时间。

输出参数

全部折叠

True 或 false,如果输入是规则的,则返回为逻辑值 1,如果不是规则的,则返回为逻辑值 0

连续时间之间的时间步,以 durationcalendarDuration 标量形式返回。如果输入不规则,则 dtNaN 值。

提示

  • 在某些情况下,您可以创建一个时间表或 datetime 向量,同时指定一个规则时间步,但结果是不规则的。当您使用日历时间单位指定时间步并且存在引入不规则时间步的时间时,就会出现这种结果。例如,如果您创建时间步为一个日历月的时间表,从 2019 年 1 月 31 日开始,则基于月份,时间步是不规则的。

    stime = datetime(2019,1,31);
    tstep = calmonths(1);
    TT = timetable('Size',[3 1],'VariableTypes',{'double'},...
                   'TimeStep',tstep,'StartTime',stime);
    tf = isregular(TT,'month')
    
    tf =
    
      logical
    
       0
    
  • 夏令时 (DST) 的转换或闰秒的 datetime 值也会造成不规则性。下表指定可能意外产生不规则结果的日期、时间和时间步。

    行时间值

    时间步

    开始时间,指定为一个月的第 29 天、第 30 天或第 31 天。

    日历月数或季度数。

    开始时间,指定为 2 月 29 日。

    日历年数。

    在从 DST 转换到标准时间的一天中凌晨 1:00 到 2:00 之间发生的任何 datetime 值(当这些值的时区遵守 DST 时)。日历天数或月数。

    闰秒的任何 datetime 值(当这些值的时区是 UTCLeapSeconds 时区时)。有关闰秒的列表,请参阅 leapseconds

    以任何日历单位(天、周、月、季度或年)指定的时间步。

扩展功能

版本历史记录

在 R2016b 中推出