Main Content

convertTo

datetime 值转换为数值表示

说明

示例

X = convertTo(D,dateType)D 中的 datetime 值转换为 dateType 指定的数值表示,并返回数值数组。例如,如果 dateType'posixtime',则 convertTo 会将 D 的每个元素转换为自 UTC(协调世界时)1970 年 1 月 1 日 00:00:00 纪元以来经过的秒数。

所有数值表示都说明相对于某时间点(称为纪元)的日期和时间。计算机通常用自指定纪元起计的秒数或时钟计时单元数来测量时间。

示例

X = convertTo(D,'epochtime',Name,Value) 使用名称-值对组参量指定纪元和每秒的时钟计时单元数。例如,如果您将纪元指定为 'Epoch','2001-01-01',则 X 中的每个值表示 2001 年 1 月 1 日午夜之前或之后的秒数。

示例

全部折叠

创建一个由 datetime 值组成的数组。

D = datetime(2019,10:12,1,12,0,0)
D = 1x3 datetime
   01-Oct-2019 12:00:00   01-Nov-2019 12:00:00   01-Dec-2019 12:00:00

D 转换为表示 Excel® 日期数值的双精度值数组。(要显示日期数值的所有位,请将数值显示格式设置为 longg。)

format longg
X = convertTo(D,'excel')
X = 1×3

                   43739.5                   43770.5                   43800.5

D 转换为一个将日期和时间表示为 .NET 时间的数组。由于 .NET 时间必须为无符号 64 位整数,convertTo 返回具有 uint64 数据类型的数组。

X = convertTo(D,'.net')
X = 1x3 uint64 row vector

   637055280000000000   637082064000000000   637107984000000000

创建一个 datetime 数组。将时区指定为东京所在的时区。

D = datetime(2019,10:12,1,12,0,0,'TimeZone','Asia/Tokyo')
D = 1x3 datetime
   01-Oct-2019 12:00:00   01-Nov-2019 12:00:00   01-Dec-2019 12:00:00

转换 D。要将时间表示为自 2001 年 1 月 1 日以来经过的毫秒数,请指定 EpochTicksPerSecond 名称-值对组参量。您可以将纪元指定为 datetime 值,或指定为文本格式的日期时间。当您指定 'epochtime' 时,输出是有符号 64 位整数组成的数组。

X = convertTo(D,'epochtime','Epoch','2001-01-01','TicksPerSecond',1000)
X = 1x3 int64 row vector

   591624000000   594302400000   596894400000

如果未指定 D 的时区,则当您指定 'epochtime' 时,convertTo 函数会将 D 的元素视为 UTC 时间。

输入参数

全部折叠

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

输出数值表示类型,指定为表中的值。

dateType 的值决定输出数组的数据类型。一些数值表示要求无符号或有符号 64 位整数。根据这些要求,输出可以具有 doubleuint64int64 数据类型。

dateType 的值

输出数值表示

输出数据类型

'excel'

自 1900 年 1 月 0 日起计的天数,表示 Excel® 日期值。此选项等效于 exceltime 函数。

注意:Excel 日期值舍入为最近的微秒。

请注意:Excel 错误地假设 1900 年是闰年。因此,计算 Excel 日期值时,1900 年 2 月 28 日与 1900 年 3 月 1 日之间因为多了一天而中断。

double

'excel1904'

自 1904 年 1 月 0 日起计的天数,表示 Excel 日期值。此选项等效于 exceltime 函数。

注意:Excel 日期值舍入为最近的微秒。

请注意:Excel 错误地假设 1900 年是闰年。因此,计算 Excel 日期值时,1900 年 2 月 28 日与 1900 年 3 月 1 日之间因为多了一天而中断。

double

'juliandate'

自 UTC 时间公元前 4714 年 11 月 24 日中午(前公历日历)起计的天数,表示儒略日期。此选项等效于 juliandate 函数。

注意:如果未指定 D 的时区,则 convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 DTimeZone 属性指定时区。

示例:使用东京的时区转换 D

D.TimeZone = 'Asia/Tokyo';
X = convertTo(D,'juliandate')

double

'modifiedjuliandate'

自 UTC 时间 1858 年 11 月 17 日午夜起计的天数,表示修改后的儒略日期。此选项等效于 juliandate 函数。

注意:如果未指定 D 的时区,则 convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 DTimeZone 属性指定时区。

示例:使用东京的时区转换 D

D.TimeZone = 'Asia/Tokyo';
X = convertTo(D,'modifiedjuliandate')

double

'posixtime'

自 UTC 时间 1970 年 1 月 1 日 00:00:00(该时间点称为 Unix 纪元)起计的秒数。此选项等效于 posixtime 函数。

Unix 时间,也称为 UNIX 纪元时间POSIX 时间,是针对 Unix 纪元测量时间的系统。(Unix 时间会忽略闰秒,因此不能真正表示 UTC 时间。)

注意:如果未指定 D 的时区,则 convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 DTimeZone 属性指定时区。

示例:转换 D,将其时区指定为东京所在的时区。

D.TimeZone = 'Asia/Tokyo';
X = convertTo(D,'posixtime')

double

'yyyymmdd'

以 YYYYMMDD 数值形式表示的日期。例如,20140402 表示 2014 年 4 月 2 日。

double

'datenum'

自 0000 年 1 月 0 日(前 ISO 日历)起计的天数。

double

'ntp'

自 UTC 时间 1900 年 1 月 1 日 00:00:00 起计的“时钟计时单元”数,表示网络时间协议 (NTP) 时间戳,其中每个时钟计时单元为 2^-32 秒。

uint64

'.net'

自 UTC 时间 0001 年 1 月 1 日 00:00:00 起计的“时钟计时单元”数,表示 Microsoft® .NET 时间戳,其中每个时钟计时单元为 100 纳秒。

uint64

'ntfs'

自 UTC 时间 1601 年 1 月 1 日 00:00:00 起计的“时钟计时单元”数,表示 NTFS 时间戳,其中每个时钟计时单元为 100 纳秒。

uint64

'tt2000'

自 J2000 以来经过的纳秒数。常用数据格式 (CDF) 将 CDF_TIME_TT2000(或 TT2000)数据类型定义为高分辨率时间类型,用于处理 CDF 文件中数据的闰秒。有关详细信息,请参阅在 CDF 中处理闰秒的要求

要将 datetime 数组转换为 TT2000 时间数组,请将输入 datatime 数组的 TimeZone 属性设置为 UTCLeapSecondsUTCLeapSeconds 时区是唯一考虑闰秒的时区。

注意:J2000 是 2000 年 1 月 1 日 12:00 的地球时 (TT)。TT 与 UTC 的不同之处在于两个因素:

  • 闰秒

  • TT 和原子钟计时相差 32.184 秒

因此,J2000 实际上发生在 UTCLeapSeconds 时区中午前 64.184 秒,时间是:

D = datetime(2000,1,1,11,58,55,816,"TimeZone","UTCLeapSeconds")
D = 2000-01-01T11:58:55.816Z

示例:D 的时区设置为 UTCLeapSeconds。然后将 D 转换为一个 TT2000 时间数组。

D = datetime(2022,4,1:3,9,30,45, ...
             "TimeZone","UTCLeapSeconds");
D = D'
D = 
  3x1 datetime array
   2022-04-01T09:30:45.000Z
   2022-04-02T09:30:45.000Z
   2022-04-03T09:30:45.000Z
X = convertTo(D,"tt2000")
X =
  3x1 int64 column vector
   702077514184000000
   702163914184000000
   702250314184000000

int64

'epochtime'

自指定纪元起计的秒数。将此选项与 'Epoch''TicksPerSecond' 名称-值对组参量结合使用。

注意:如果未指定 D 的时区,则 convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 DTimeZone 属性指定时区。

示例:指定 D 的时区。然后将其转换为自 2001 年 1 月 1 日以来经过的秒数。

D.TimeZone = 'Asia/Tokyo';
X = convertTo(D,'epochtime','Epoch','2001-01-01')

int64

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: convertTo(D,'epochtime','Epoch','2001-01-01','TicksPerSecond',1000) 返回自 2001 年 1 月 1 日起计的毫秒数。

用于时间测量的点,指定为以逗号分隔的对组,其中包含 'Epoch'datetime 标量、字符向量或字符串标量。

如果 'Epoch' 的值是字符向量或字符串标量,则它必须以 datetime 函数能够识别的格式表示日期时间(例如,'2001-01-01' 表示 2001 年 1 月 1 日)。

默认值为 Unix 纪元,表示 UTC 时间 1970 年 1 月 1 日 00:00:00。

每秒的时钟计时单元数,指定为以逗号分隔的对组,其中包含 'TicksPerSecond' 和数值标量。

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2018b 中推出