Main Content

timeofday

datetime 数组中的值代表的自午夜以来经过的时间

说明

示例

T = timeofday(DT) 返回一个 duration 数组,其值等于 DT 中每个元素代表的自午夜以来经过的时间。

对于没有时区的 datetime 数组,在大多数其他情况下,T 等于

E = hours(DT.Hour) + minutes(DT.Minute) + seconds(DT.Second)

如果 DT 将其 TimeZone 属性设置为遵循夏令时 (DST) 的时区,则 timeofday 会考虑 DST。有关详细信息,请参阅算法

输出参量 T 也等效于 DT - dateshift(DT,'start','day')

示例

[T,D] = timeofday(DT) 还将 DT 中的值的日期部分以 datetime 数组 D 形式返回。

输出参量 D 等效于 dateshift(DT,'start','day')

示例

全部折叠

创建一个 datetime 数组。

DT = datetime('now') + hours(1:3)
DT = 1x3 datetime
   13-Feb-2024 00:15:44   13-Feb-2024 01:15:44   13-Feb-2024 02:15:44

计算每个输入值代表的自午夜以来经过的时间。以小时、分钟和秒显示时间。

T = timeofday(DT)
T = 1x3 duration
   00:15:44   01:15:44   02:15:44

创建一个 datetime 数组。

DT = datetime('now') + hours(1:3)
DT = 1x3 datetime
   12-Feb-2024 23:22:02   13-Feb-2024 00:22:02   13-Feb-2024 01:22:02

DT 的日期部分以第二个 datetime 数组形式返回。由于 D 的小时、分钟和秒分量都设置为午夜(即 24 小时格式的 00:00:00),D 仅显示日期。

[T,D] = timeofday(DT)
T = 1x3 duration
   23:22:02   00:22:02   01:22:02

D = 1x3 datetime
   12-Feb-2024   13-Feb-2024   13-Feb-2024

计算经过夏令时 (DST) 调整的自某天午夜以来经过的时间。

创建一个 datetime 数组。将其 TimeZone 属性设置为一个遵循 DST 的时区。将日期设置为发生 DST 调整的日期。

tz = 'America/New_York';
fmt = 'dd-MMM-yyyy HH:mm:ss z';
DT = datetime(2015,3,8,'TimeZone',tz,'Format',fmt) + hours(1:4)
DT = 1x4 datetime
   08-Mar-2015 01:00:00 EST   08-Mar-2015 03:00:00 EDT   08-Mar-2015 04:00:00 EDT   08-Mar-2015 05:00:00 EDT

计算经过的时间。DST 调整发生在此时区的 2015 年 3 月 8 日凌晨 02:00。timeofday 会考虑当天 02:00 或 02:00 之后的时间调整。将 T 的格式设置为以小时为单位显示经过的时间。

T = timeofday(DT);
T.Format = 'h'
T = 1x4 duration
   1 hr   2 hr   3 hr   4 hr

为了进行比较,请使用 DT 的小时、分钟和秒分量来计算经过的时间。此计算不考虑 DST 调整。

E = hours(DT.Hour) + minutes(DT.Minute) + seconds(DT.Second)
E = 1x4 duration
   1 hr   3 hr   4 hr   5 hr

根据一个 datetime 数组中日期的时间,设置另一个 datetime 数组中日期的时间。

设置日期的时间有两种方式。

  • 使用 timeofday 从第一个 datetime 数组中拆分时间部分,并将该时间部分添加到第二个 datetime 数组中。

  • 将第二个 datetime 数组的 HourMinuteSecond 分量设置为等于第一个 datetime 数组的 HourMinuteSecond 分量。

如果使用第一种方式,您可能无法始终正确处理夏令时 (DST) 调整。只有第二种方式能正确处理任何 DST 调整。

创建一个 datetime 数组。每个元素有不同的时间分量。

DT1 = datetime(2015,3,7) + hours(1:4)
DT1 = 1x4 datetime
   07-Mar-2015 01:00:00   07-Mar-2015 02:00:00   07-Mar-2015 03:00:00   07-Mar-2015 04:00:00

创建另一个 datetime 数组。每个元素有相同的日期时间分量。

DT2 = datetime(2015,3,[8 8 8 8])
DT2 = 1x4 datetime
   08-Mar-2015   08-Mar-2015   08-Mar-2015   08-Mar-2015

根据 DT1 中日期的时间,设置 DT2 中日期的时间。由于 DT1DT2 没有时区,其时间分量是相同的。

DT2 = dateshift(DT2,'start','day') + timeofday(DT1)
DT2 = 1x4 datetime
   08-Mar-2015 01:00:00   08-Mar-2015 02:00:00   08-Mar-2015 03:00:00   08-Mar-2015 04:00:00

创建一个 datetime 数组,其中包含将 TimeZone 属性设置为 'America/New_York' 的元素。由于 DT3 的时区和 DST 调整发生在 2015 年 3 月 8 日,因此 DT3 的时间分量与 DT1 的时间分量不同。

tz = 'America/New_York';
fmt = 'dd-MMM-yyyy HH:mm:ss z';
DT3 = datetime(2015,3,8,'TimeZone',tz,'Format',fmt) + timeofday(DT1)
DT3 = 1x4 datetime
   08-Mar-2015 01:00:00 EST   08-Mar-2015 03:00:00 EDT   08-Mar-2015 04:00:00 EDT   08-Mar-2015 05:00:00 EDT

显示自午夜以来经过的时间。timeofday 考虑 DST 调整。经过的时间显示 DT3 中的时间不正确。DT3 中最后一个时间对应于上午 5:00,但在 DT1 中,自午夜以来仅过去了四个小时。

T = timeofday(DT3)
T = 1x4 duration
   01:00:00   02:00:00   03:00:00   04:00:00

要正确设置DT4 的时间,而不受时区或一年中任何一天的影响 ,请使用 DT1HourMinuteSecond 属性。

DT4 = datetime(2015,3,[8 8 8 8],'TimeZone',tz,'Format',fmt);
DT4.Hour = DT1.Hour;
DT4.Minute = DT1.Minute;
DT4.Second = DT1.Second;
DT4
DT4 = 1x4 datetime
   08-Mar-2015 01:00:00 EST   08-Mar-2015 03:00:00 EDT   08-Mar-2015 03:00:00 EDT   08-Mar-2015 04:00:00 EDT

在此时区,不存在东部标准时间 2015 年 3 月 8 日凌晨 2:00,原因是该时刻发生了 DST 调整。因而结果的第二个元素的时间分量为东部夏令时间凌晨 3:00。

输入参数

全部折叠

日期时间输入,指定为 datetime 数组。

输出参量

全部折叠

输入数组的时间部分,以 duration 数组形式返回。

输入数组的日期部分,以 datetime 数组形式返回。

算法

datetime 数组可以将其 TimeZone 属性设置为遵循夏令时 (DST) 的时区。timeofday 函数考虑 DST。

  • 如果输入参量 DT 是没有时区的 datetime 数组,则输出 T 也等于

    E = hours(DT.Hour) + minutes(DT.Minute) + seconds(DT.Second)

  • 如果 DT 将其 TimeZone 属性设置为不遵循 DST 的时区,则 T 等于 E

  • 如果 DTTimeZone 属性设置为一个遵循 DST 的时区,则 timeofday 在计算天数时会考虑 DST 调整。在这些天中,对于在 DST 调整发生之后的时间,TE 的差异即为调整的时间量。

扩展功能

版本历史记录

在 R2014b 中推出

另请参阅

| | | | |