datetime
表示时间点的数组
说明
datetime 数据类型表示时间点,如 2020 年 8 月 24 日上午 10:50:30。datetime 数组指定与数组中存储的每个时间点相关联的年、月、日、小时、分钟和秒分量(使用外推 ISO 日历)。
此外,datetime 数组提供:
输出显示和输入文本解析的灵活格式。
存储精确到纳秒的秒数
可处理时区、夏令时和闰秒的属性。
创建对象
语法
描述
返回一个对应于当前日期和时间的标量 t = datetimedatetime 数组。
使用 t = datetime(relativeDay)relativeDay 指定的日期。relativeDay 输入可以是 'today'、'tomorrow'、'yesterday' 或 'now'。
根据表示时间点的 t = datetime(DateStrings)DateStrings 中的文本创建一个日期时间值数组。
使用由 t = datetime(DateStrings,'InputFormat',infmt)infmt 指定的格式来解释 DateStrings。输入参量 DateStrings 中的所有值必须具有相同的格式。
要避免理解不清类似的格式,请指定 'InputFormat' 及其相应的值 infmt。
要控制 t 的显示格式,请指定 'Format' 名称-值对组参量,或设置 t 的 Format 属性。
根据 t = datetime(DateVectors)DateVectors 中的日期向量创建一个由日期时间值组成的列向量。
为 t = datetime(Y,M,D)Y、M 和 D(年、月、日)数组的对应元素创建一个日期时间值数组。这些数组的大小必须相同(或者,其中任一数组可以是标量)。还可以将输入参量指定为日期向量 [Y M D]。
还创建 t = datetime(Y,M,D,H,MI,S)H、MI 和 S(小时、分钟和秒)数组。所有数组的大小必须相同(或者,其中任一数组可以是标量)。还可以将输入参量指定为日期向量 [Y M D H MI S]。
添加一个 t = datetime(Y,M,D,H,MI,S,MS)MS(毫秒)数组。所有数组的大小必须相同(或者,其中任一数组可以是标量)。
支持上述语法中的任何输入参量,且可使用一个或多个名称-值对组参量指定其他选项。例如,您可以使用 t = datetime(___,Name,Value)'Format' 名称-值对组参量指定 t 的显示格式。
要在根据文本创建日期时间值时获得最佳性能,请指定 'Format' 或 'InputFormat' 及其相应的值 infmt。
输入参量
相对于当前日期的日期,指定为以下值之一。
relativeDay 的值 | 描述 |
|---|---|
'yesterday' | 上一天日期的午夜 |
'today' | 当前日期的午夜 |
'tomorrow' | 下一天日期的午夜 |
'now' | 当前日期和时间 |
表示日期和时间的文本,指定为字符数组、字符向量元胞数组或字符串数组。datetime 函数首先尝试将 DateStrings 的格式与常用格式进行匹配。如果您知道格式,请指定 'InputFormat' 及其对应的 infmt 值,或指定 'Format' 名称-值对组参量。
示例: '24-Oct-2014 12:45:07'
示例: {'15-Oct-2013','20-Nov-2014'}
示例: ["11-Nov-2016","12-Dec-2016"]
数据类型: char | cell | string
表示日期和时间的输入文本的格式,指定为包含字母标识符的字符向量或字符串标量:
如果
infmt不包含日期设定符,则datetime假设DateStrings中的值发生在当天。如果
infmt不包括时间设定符,则datetime假设DateStrings中的值发生在午夜。
下表显示了几种常见的输入格式,还包括纽约市 2014 年 4 月 19 日星期六晚上 9:41:06.12345 的格式化输入示例。
infmt 的值 | 示例 |
|---|---|
'yyyy-MM-dd' | 2014-04-19 |
'dd/MM/yyyy' | 19/04/2014 |
'dd.MM.yyyy' | 19.04.2014 |
'yyyy年 MM月 dd日' | 2014年 04月 19日(日语区域设置的字符,ja_JP) |
'MMMM d, yyyy' | April 19, 2014 |
'eeee, MMMM d, yyyy h:mm a' | Saturday, April 19, 2014 9:41 PM |
'MMMM d, yyyy HH:mm:ss Z' | April 19, 2014 21:41:06 -0400 |
'yyyy-MM-dd''T''HH:mmXXX' | 2014-04-19T21:41-04:00 |
'yyyy-MM-dd HH:mm:ss.SSS' | 2014-04-19 21:41:06.123 |
对于表示小数秒的输入文本,您可以指定 infmt 最多包含 9 个 S 字符,以指示小数秒的位数。例如,'yyyy-MM-dd HH:mm:ss.SSS' 是表示以毫秒精度表示日期和时间的文本的格式。
有关有效字母标识符的完整列表,请参阅日期时间数组的 Format 属性。您可以将大多数标识符同时用作输入格式和显示格式。但是,不要使用 MMMMM 或任何 e 标识符来解释输入文本,因为这些标识符仅用于显示。
注意
datetime 接受的字母标识符与 datestr、datenum 和 datevec 函数使用的标识符不同。
数据类型: char | string
日期向量指定为 m×6 或 m×3 矩阵,分别包含 m 个完整或部分日期向量。
完整日期向量带有六个元素,依顺序分别指示年份、月份、日期、小时、分钟和秒。
部分日期向量只带有三个元素,依顺序分别指示年份、月份和日期。
DateVector 的每个元素应为正整数或负整数值,但秒元素例外,它可以为小数。如果某元素不在常规范围内,则 datetime 会同时调整该日期向量元素及其前面的元素。例如,如果分钟元素为 70,则 datetime 会将小时元素增加 1 并将分钟元素设置为 10。如果分钟元素为 -15,则 datetime 会将小时元素减少 1 并将分钟元素设置为 45。
如果任一值是
NaN,则对应的datetime值是NaT。如果任一值为
Inf或-Inf,则对应的datetime值为Inf或-Inf。
示例: [2014 10 24 12 45 07]
示例: [2014 10 24]
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
年、月和日数组,指定为数值数组。这些数组的大小必须相同,或者其中任一数组可以是标量。Y,M,D 应为整数值。
如果
Y,M,D全为标量或全为列向量,则您可以将输入参量指定为日期向量[Y M D]。如果
Y、M或D输入的元素不在常规范围内,则datetime会同时调整该元素及上一输入的同一元素。有关详细信息,请参阅DateVectors输入参量的说明。如果任一值是
NaN,则对应的datetime值是NaT。如果任一值为
Inf或-Inf,则对应的datetime值为Inf或-Inf。
示例: 2003,10,24
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
年、月、日、小时、分钟和秒数组,指定为数值数组。这些数组的大小必须相同,或其中任何一项可以为标量。指定小数秒作为秒输入 S 的一部分。Y,M,D,H,MI 数组必须包含整数值。
如果
Y,M,D,H,MI,S全为标量或全为列向量,则您可以将输入参量指定为日期向量[Y M D H MI S]。如果
Y、M、D、H、MI或S输入的元素不在常规范围内,则datetime会同时调整该元素及上一输入的同一元素。有关详细信息,请参阅DateVectors输入参量的说明。如果任一值是
NaN,则对应的datetime值是NaT。如果任一值为
Inf或-Inf,则对应的datetime值为Inf或-Inf。
示例: 2003,10,24,12,45,07.451
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
年、月、日、小时、分钟、秒和毫秒数组,指定为数值数组。这些数组的大小必须相同,或其中任何一项可以为标量。Y,M,D,H,MI,S 数组必须包含整数值。MS 可以包含毫秒的小数部分。
如果 Y、M、D、H、MI、S 或 MS 输入的一个元素不在常规范围内,则 datetime 会同时调整该元素及上一输入的同一元素。有关详细信息,请参阅 DateVectors 输入参量的说明。
如果任一值是
NaN,则对应的datetime值是NaT。如果任一值为
Inf或-Inf,则对应的datetime值为Inf或-Inf。
示例: 2003,10,24,12,45,07,10.52
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
数值,指定为数组。
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
X 中的值的类型,指定为下列值之一。
|
|
|
|---|---|
|
| 从 0000 年 1 月 0 日起计的天数(外推 ISO 日历)。 |
|
| 从 1900 年 1 月 0 日起计的天数。 Excel® 日期值舍入为最近的微秒。 请注意:Excel 错误地假设 1900 年是闰年。因此,计算 Excel 日期值时,1900 年 2 月 28 日与 1900 年 3 月 1 日之间因为多了一天而中断。 |
|
| 从 1904 年 1 月 0 日起计的天数。 Excel 日期值舍入为最近的微秒。 请注意:Excel 错误地假设 1900 年是闰年。因此,计算 Excel 日期值时,1900 年 2 月 28 日与 1900 年 3 月 1 日之间因为多了一天而中断。 |
|
| 从 UTC 时间公元前 4714 年 11 月 24 日(外推格里历)中午起计的天数。 如果您将 示例:使用纽约的时区转换 T = datetime(X,'ConvertFrom','juliandate',... 'TimeZone','America/New_York') 然后,您可以将 T.TimeZone = '' |
|
| 从 UTC 时间 1858 年 11 月 17 日午夜起计的天数。 如果您将 示例:使用纽约的时区转换 T = datetime(X,'ConvertFrom','modifiedjuliandate',... 'TimeZone','America/New_York') 然后,您可以将 T.TimeZone = '' |
|
| 从 UTC 时间 1970 年 1 月 1 日 00:00:00 起计的秒数,不计算闰秒。 如果您将 示例:使用纽约的时区转换 T = datetime(X,'ConvertFrom','posixtime',... 'TimeZone','America/New_York') 然后,您可以将 T.TimeZone = '' |
|
| 以 YYYYMMDD 数值形式表示的日期。例如, |
| 自 UTC 1900 年 1 月 1 日 00:00:00 以来的“时钟计时单元”数,每个时钟计时单元为 2^-32 秒。 |
| 自 UTC 0001 年 1 月 1 日 00:00:00 以来的“时钟计时单元”数,每个时钟计时单元为 100 纳秒。 |
| 自 UTC 1601 年 1 月 1 日 00:00:00 以来的“时钟计时单元”数,每个时钟计时单元为 100 纳秒。 |
| 自 J2000 以来经过的纳秒数。常用数据格式 (CDF) 将 输入 要转换 注意:J2000 是 2000 年 1 月 1 日 12:00 的地球时 (TT)。TT 与 UTC 的不同之处在于两个因素:
因此,J2000 实际上发生在 D = datetime(2000,1,1,11,58,55,816,"TimeZone","UTCLeapSeconds") D = 2000-01-01T11:58:55.816Z 示例:创建一个表示 X = int64([702077514184000000; ... 702163914184000000; ... 702250314184000000]) X =
3x1 int64 column vector
702077514184000000
702163914184000000
702250314184000000
D = datetime(X,"ConvertFrom","tt2000","TimeZone","UTCLeapSeconds") D =
3x1 datetime array
2022-04-01T09:30:45.000Z
2022-04-02T09:30:45.000Z
2022-04-03T09:30:45.000Z
|
| 自默认纪元时间以来的秒数。 默认纪元时间是 UTC 1970 年 1 月 1 日 00:00:00。 示例:使用默认纪元时间对 T = datetime(X,'ConvertFrom','epochtime') |
|
| 从纪元开始的秒数。 要指定纪元,请使用附加的 示例:使用 2000 年 1 月 1 日午夜作为纪元转换 T = datetime(X,'ConvertFrom',... 'epochtime','Epoch','2000-01-01') |
| 自纪元以来的“时钟计时单元”数。 除指定 示例:使用 2000 年 1 月 1 日午夜作为纪元转换 T = datetime(X,'ConvertFrom',... 'epochtime','Epoch','2000-01-01','TicksPerSecond',1000) |
名称-值参数
以 Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: 'Format','eeee MMMM d, y','TimeZone','local' 对日期时间值应用显示格式并指定本地时区。
输出数组中的值的显示格式,指定为以逗号分隔的对组,其中包含 'Format' 和下列值之一。
Format 的值 | 描述 |
|---|---|
|
| 使用默认的显示格式。 |
|
| 使用输入格式 |
字符向量或字符串标量 | 使用您通过字符向量或字符串标量指定的格式。 |
如果您指定自己的格式,则必须使用有效的字母标识符。有关有效字母标识符的完整列表,请参阅 Format 属性。
出厂默认格式取决于您的系统区域设置。要更改默认显示格式,请参阅默认 datetime 格式。
如果指定 DateStrings 输入,但不指定 'InputFormat' 参数,则 datetime 尝试使用 Format 值解释 DateStrings。
示例: 'Format','eeee, MMMM d, yyyy HH:mm:ss' 显示日期和时间,例如 Wednesday, April 9, 2014 21:41:06。
数据类型: char | string
DateStrings 输入参量值的区域设置,指定为以逗号分隔的对组,其中包含 'Locale' 和一个字符向量或字符串标量。Locale 值确定 datetime 如何解释 DateStrings。但是,它不能决定如何显示输出 datetime 值。
Locale 值可以为:
"system",用于指定您的系统区域设置。形式的字符串标量或字符向量,其中xx_YYxx是用于指定语言的小写 ISO 639-1 双字母代码,YY是用于指定国家/地区的大写 ISO 3166-1 alpha-2 代码。
下表列出了区域设置的某些常用值。
| 区域设置 | 语言 | 国家/地区 |
|---|---|---|
"de_DE" | 德语 | 德国 |
"en_GB" | 英语 | 英国 |
"en_US" | 英语 | 美国 |
"es_ES" | 西班牙语 | 西班牙 |
"fr_FR" | 法语 | 法国 |
"it_IT" | 意大利语 | 意大利 |
"ja_JP" | 日语 | 日本 |
"ko_KR" | 韩语 | 韩国 |
"nl_NL" | 荷兰 | 荷兰 |
"zh_CN" | 简体中文 | 中国 |
仅在使用 DateStrings 输入参量时才能使用 'Locale' 名称-值对组。
示例: 'Locale',"de_DE"
注意
Locale 值确定如何解释输入文本值。输出日期时间值始终以指定的语言显示,该语言通过 MATLAB® 的“设置”窗口中的日期时间格式部分中的区域设置选项指定。
要更改显示的默认日期时间区域设置,请参阅Modify Command Window Settings。
数据类型: char | string
双字符年份所在的 100 年日期范围的起始年份,指定为包含 'PivotYear' 和整数的逗号分隔对组。使用基准年份来解释将年份指定为两个字符的日期。即,仅当 infmt 参量包括 y 或 yy 时,基准年份才有效。
仅在使用 DateStrings 输入参量时才能使用 'PivotYear' 名称-值对组。
示例: 'PivotYear',1900
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
时区,指定为以逗号分隔的对组,其中包含 'TimeZone' 和一个指定时区的字符向量或字符串标量。
datetime 函数使用 'TimeZone' 的值来解释输入数据,并设置输出数组的 TimeZone 属性。如果输入数据是包括时区的字符向量或字符串,则 datetime 函数将所有值转换为指定的时区。
有关详细信息和时区列表,请参阅 TimeZone 属性。
数据类型: char | string
属性
显示格式,指定为 'default'、字符向量或字符串标量。
Format 的值 | 描述 |
|---|---|
| 使用默认的显示格式。 |
字符向量或字符串标量 | 使用您通过字符向量或字符串标量指定的格式。 |
如果您指定自己的格式,则它必须使用与 Unicode® 区域设置数据标记语言 (LDML) 中有关日期和时间的标准对应的有效字母标识符。有关 LDML 的详细信息,请参阅 Unicode 技术标准 #35,尤其是日期字段符号表。
示例: 'eeee, MMMM d, yyyy HH:mm:ss' 显示日期和时间,例如 Wednesday, April 9, 2014 21:41:06。
要分隔字段,可以包括非字母字符,例如连字符、空格、冒号或任何非 ASCII 字符。要将字母 A-Z 和 a-z 作为字面字符包括在格式中,请将它们放在单引号内。
示例: 'uuuu-MM-dd''T''HH:mm:ss' 显示日期和时间,例如 2014-04-09T21:41:06。
注意
datetime 接受的字母标识符与 datestr、datenum 和 datevec 函数使用的标识符不同。
出厂默认格式取决于您的系统区域设置。要更改默认显示格式,请参阅默认 datetime 格式。
常用格式示例
下表列出了常用的显示格式。这些示例显示纽约市 2014 年 4 月 9 日星期三晚上 9:41:06.12345 的格式化输出。
Format 的值 | 示例 |
|---|---|
'yyyy-MM-dd' | 2014-04-09 |
'dd/MM/yyyy' | 09/04/2014 |
'dd.MM.yyyy' | 09.04.2014 |
'yyyy年 MM月 dd日' | 2014年 04月 09日(日语区域设置的字符,ja_JP) |
'MMMM d, yyyy' | April 9, 2014 |
'eeee, MMMM d, yyyy h:mm a' | Wednesday, April 9, 2014 9:41 PM |
'MMMM d, yyyy HH:mm:ss Z' | April 9, 2014 21:41:06 -0400 |
'yyyy-MM-dd''T''HH:mmXXX' | 2014-04-09T21:41-04:00 |
'yyyy-MM-dd HH:mm:ss.SSS' | 2014-04-09 21:41:06.123 |
所有日期和时间格式
使用这些标识符指定日期和时间字段的显示格式。显示格式显示纽约市 2014 年 4 月 9 日星期三晚上 9:41:06.12345 的输出。
| 字母标识符 | 描述 | 显示 |
|---|---|---|
G | 年代 | CE |
y | 格里历年份,没有前导零。格里历年份值将正数值赋给 CE 年份,将负数值赋给 BCE 年份,不对年份 0 赋予年份值。请参阅紧随此表后的“注释”。 | 2014 |
yy | 格里历年份,只使用最后两位数字。格里历年份值将正数值赋给 CE 年份,将负数值赋给 BCE 年份,不对年份 0 赋予年份值。请参阅紧随此表后的“注释”。 | 14 |
yyy, yyyy ... | 格里历年份,至少使用 'y' 实例数指定的位数。格里历年份值将正数值赋给 CE 年份,将负数值赋给 BCE 年份,不对年份 0 赋予年份值。 | 对于年份 2014,'yyy' 显示 2014,而 'yyyyy' 则显示 02014。 |
u, uu, ... | ISO 年份。单个数字来指定年份。ISO 年份值将正数值分配给 CE 年份,将负数值分配给 BCE 年份,1 BCE 表示年份 0。 | 2014 |
Q | 季度,使用一位数 | 2 |
QQ | 季度,使用两位数 | 02 |
QQQ | 季度,缩写 | 2 季度 |
QQQQ | 季度,全名 | 第二季度 |
M | 月份,使用一位或两位数字 | 4 |
MM | 月份,使用两位数字 | 04 |
MMM | 月份,缩写名称 | 四月 |
MMMM | 月份,全名 | 四月 |
MMMMM | 月份,首字母大写 | A |
W | 一月中的第几周,使用一位数 | 2 |
d | 一月中的第几天,使用一位或两位数 | 9 |
dd | 一月中的第几天,使用两位数 | 09 |
D | 一年中的第几天,使用一位、两位或三位数 | 99 |
DD | 一年中的第几天,使用两位数 | 99 |
DDD | 一年中的第几天,使用三位数 | 099 |
e | 一周中的星期几,使用一位或两位数的数值。 | 4,星期日是一周中的第一天。 |
ee | 一周中的星期几,使用两位数字 | 04 |
eee | 星期几,缩写名称 | Wed |
eeee | 星期几,全名 | Wednesday |
eeeee | 星期几,使用一位大写数字 | W |
a | 一天中的时段(上午或下午) | 下午 |
h | 小时,采用 12 小时制格式,使用一位或两位数 | 9 |
hh | 小时,采用 12 小时制格式,使用两位数 | 09 |
H | 小时,采用 24 小时制格式,使用一位或两位数 | 21 |
HH | 小时,采用 24 小时制格式,使用两位数 | 21 |
m | 分钟,使用一位或两位数 | 41 |
mm | 分钟,使用两位数 | 41 |
s | 秒,使用一位或两位数 | 6 |
ss | 秒,使用两位数 | 06 |
S, SS, ..., SSSSSSSSS | 小数秒,使用 'S' 个数所指定的位数(最多 9 位)。 | 'SSS' 将 6.12345 秒截断为 6.123。 |
注意
一些标识符会根据区域设置、输入数据或其他标识符的值或是否存在多余标识符修改其行为。
区域设置的影响:
当显示或解释本地化名称(如日期或月份名称)时,
datetime标识符遵循既定的国际标准。为了确保使用不同区域设置的行为相似,请避免使用具有区域相关行为的标识符。通常,这样的标识符指定区域设置相关的日期或月份名称,或指定区域设置相关的时区偏移量。
区域设置相关的标识符包括
MMM、MMMM、eee、eeee、z和ZZZZ。
大年份值的影响:
144683 年 CE 之后或 140743 BCE 之前的
datetime值仅显示年份数,而不管Format属性指定的标识符为何。
日期和年份标识符的影响:
如果您读取两位年份数并将格式指定为
y或yy,则基准年份确定该年所属的世纪。如果您读取日期数字,而您指定的格式同时包含日期 (
D) 和格里历年 (y) 的标识符,则datetime可能无法正确读取日期数字。请使用 ISO 年份 (u) 来代替y。使用一个或多个
u标识符而非y标识符在使用接近零的年份数时表示年份。
额外标识符的影响:
通常,如果您指定的标识符实例比在表中显示的多,则
datetime会用前导零填充该标识符的显示格式。例如,如果您将小时标识符指定为
HHHH,如uuuu-MM-dd HHHH:mm:ss中所示,则 2024 年 1 月 1 日下午 12:30 的显示会用两个前导零填充小时字段。d = datetime(2024,1,1,12,30,0); d.Format = "uuuu-MM-dd HHHH:mm:ss"d = datetime 2024-01-01 0012:30:00
同样,如果忽略前导零会导致
datetime仍可以解析的输入格式,则在文本输入中通常会忽略前导零。d = datetime("2024-01-01 0012:30:00")d = datetime 2024-01-01 12:30:00
时区偏移量格式
使用这些标识符指定时区偏移量的显示格式。时区偏移量是指具体日期时间与 UTC 之间相差的时间量。时区设有确定偏移量的规则,偏移量在一年中的不同时间会有所差异。在想要确保明确显示时间分量时,在显示格式中包括日期时间数组的时区偏移量标识符。
| 字母标识符 | 描述 | 显示 |
|---|---|---|
z | 时区偏移量的缩写名称。如果此值不可用,则时区偏移量使用短 UTC 格式,例如 此标识符指定时区偏移量的本地化短版本。其行为取决于区域设置。 | EDT |
Z | ISO 8601 基本格式,带有小时、分钟和可选的秒字段。 | -0400 |
ZZZZ | 长 UTC 格式。 此标识符指定时区偏移量的本地化长版本。其行为取决于区域设置。 | UTC-04:00 |
ZZZZZ | ISO 8601 扩展格式,带有小时、分钟和可选的秒字段。以 ISO 8601 标准规定的 UTC 指示符 "Z" 的形式来显示与零时区的偏移量。 | -04:00 |
x 或 X | ISO 8601 基本格式,带有小时字段和可选的分钟字段。如果您指定 X,则以 ISO 8601 标准规定的 UTC 指示符“Z”的形式来显示与零时区的偏移量。 | -04 |
xx 或 XX | ISO 8601 基本格式,带有小时和分钟字段。如果您指定 XX,则以 ISO 8601 标准规定的 UTC 指示符“Z”的形式来显示与零时区的偏移量。 | -0400 |
xxx 或 XXX | ISO 8601 扩展格式,带有小时和分钟字段。如果您指定 XXX,则以 ISO 8601 标准规定的 UTC 指示符“Z”的形式来显示与零时区的偏移量。 | -04:00 |
xxxx 或 XXXX | ISO 8601 基本格式,带有小时、分钟和可选的秒字段。如果您指定 XXXX,则以 ISO 8601 标准规定的 UTC 指示符“Z”的形式来显示与零时区的偏移量。 | -0400 |
xxxxx 或 XXXXX | ISO 8601 扩展格式,带有小时、分钟和可选的秒字段。如果您指定 XXXXX,则以 ISO 8601 标准规定的 UTC 指示符“Z”的形式来显示与零时区的偏移量。 | -04:00 |
时区,指定为字符向量或字符串标量。在创建 datetime 数组后,您可以设置此属性来更改时区。
为了设置时区和计算时区偏移量,datetime 数据类型使用由互联网号码分配局 (IANA) 在 IANA Time Zone Database 中提供的代码和数据。datetime 当前使用的版本包含 IANA 提供的最新更新。(要获取 datetime 使用的版本,请返回 timezones 函数的第二个输出。)
下表列出了设置 TimeZone 属性时可以指定的值。
指定的值 | 生成的时区 |
|---|---|
| 没有时区。 |
IANA 时区数据库中的时区地区的名称 例如: | 时区地区综合考虑了从该地理区域观察到的标准时间和夏令时与 UTC 之间的偏移所适用的当前规则和历史规则。有关 IANA 时区的完整列表,请参阅 |
形式为 例如: 例如: | 与 UTC 之间具有固定偏移量的时区。该字符串必须对大于 |
例如: 例如: | 与 UTC 之间具有固定偏移量的时区。 |
| 协调世界时。 |
| 协调世界时,但时区还考虑闰秒。有关 |
|
|
下表列出了 IANA 时区数据库中的时区地区的某些通用名称。
TimeZone 的值 | UTC 偏移量 | UTC DST 偏移量 |
|---|---|---|
'Africa/Johannesburg' | +02:00 | +02:00 |
'America/Chicago' | −06:00 | −05:00 |
'America/Denver' | −07:00 | −06:00 |
'America/Los_Angeles' | −08:00 | −07:00 |
'America/New_York' | −05:00 | −04:00 |
'America/Sao_Paulo' | −03:00 | −02:00 |
'Asia/Hong_Kong' | +08:00 | +08:00 |
'Asia/Kolkata' | +05:30 | +05:30 |
'Asia/Tokyo' | +09:00 | +09:00 |
'Australia/Sydney' | +10:00 | +11:00 |
'Europe/London' | +00:00 | +01:00 |
'Europe/Zurich' | +01:00 | +02:00 |
数据类型: char | string
datetime 数组中每个值的年份数,指定为大小和形状与 datetime 数组相同的数值数组。每个年份数都是一个基于 ISO 日历的整数值。当前时代中的年份是正数,上一个时代中的年份是零或负数。例如,年份数 1 BCE 为 0。
如果为发生在闰日(2 月 29 日)的 datetime 值将 Year 属性设置为非闰年,则 Day 和 Month 属性会更改为 3 月 1 日。
datetime 数组中的每个值的月份值,指定为大小和形状与 datetime 数组相同的数值数组。每个月份值都是一个从 1 到 12 的整数值。如果设置的值不在该范围内,则相应地调整 Year 属性,并且 Month 属性保留在 1 到 12 范围内。例如,第 0 个月对应于上一年的第 12 个月。对于历史日期,月份值基于外推格里历。
datetime 数组中每个值的月中日期值,指定为大小和形状与 datetime 数组相同的数值数组。每个月中日期值都是一个介于 1 到 28、29、30 或 31 的整数值,具体取决于月和年。如果设置的值不在该范围内,则相应地调整 Month 和 Year 属性,并且 Day 属性位于恰当范围内。例如,第 0 天对应于上个月的最后一天。对于历史日期,日期值基于外推格里历。
datetime 数组中每个值的小时值,指定为大小和形状与 datetime 数组相同的数值数组。每个小时值都是一个从 0 到 23 的整数值。如果设置的值不在该范围内,则相应地调整 Day、Month 和 Year 属性,并且 Hour 属性位于恰当范围内。例如,第 -1 小时对应于上一天的第 23 个小时。
以下条件适用于具有特定时区(遵守夏令时)的日期时间数组:
如果您为
Hour属性指定的值会产生一个在夏令时开始时的间隔期间不存在的日期时间,则Hour属性的值会调整为下一小时。如果您为
Hour属性指定的值会产生一个在夏令时结束时的交叠期间存在多义性的日期时间,则该日期时间会调整为该小时的两个时间(采用标准时间)中的第二个。
datetime 数组中每个值的分钟值,指定为大小和形状与 datetime 数组相同的数值数组。每个分钟值都是一个从 0 到 59 的整数值。如果指定的值不在该范围内,则相应地调整 Hour、Day、Month 和 Year 属性,并且 Minute 属性位于恰当范围内。例如,第 -1 分钟对应于上一个小时的第 59 分钟。
datetime 数组中每个值的秒值,指定为大小和形状与 datetime 数组相同的数值数组。每个秒值都是一个通常介于 0 和 60 范围中的浮点值。如果设置的值不在该范围内,则相应地调整 Minute、Hour、Day、Month 和 Year 属性,并且 Second 属性位于恰当范围内。例如,第 -1 秒对应于上一个小时的第 59 秒。
一个 datetime 数组,'UTCLeapSeconds' 的 TimeZone 值的范围为从 0 到小于 61 的秒数。从 60 到 61 的值表示发生在闰秒期间的日期时间。(有关 datetime 数据类型支持的闰秒列表,请参阅 leapseconds。)
此 属性 为只读。
系统时区设置,指定为字符向量或字符串标量。该时区设置由运行 MATLAB 的系统决定。
示例: America/New_York
示例
在本地系统时区中指定当前日期和时间。
t = datetime('now','TimeZone','local','Format','d-MMM-y HH:mm:ss Z')
t = datetime
13-Jul-2025 19:10:19 -0400
在韩国首尔表示的时区中指定当前日期和时间。
t = datetime('now','TimeZone','Asia/Seoul','Format','d-MMM-y HH:mm:ss Z')
t = datetime
14-Jul-2025 08:10:20 +0900
基于字符向量元胞数组创建 datetime 数组。
DateStrings = {'2014-05-26';'2014-08-03'};
t = datetime(DateStrings,'InputFormat','yyyy-MM-dd')t = 2×1 datetime
26-May-2014
03-Aug-2014
t 中的日期时间值使用默认格式显示,而不是使用输入日期的格式显示。
从 R2016b 开始,您可以使用 string 函数创建字符串数组,并将其转换为日期时间值。
str = ["2016-03-24","2016-04-19"]
str = 1×2 string
"2016-03-24" "2016-04-19"
转换字符串,将输入格式指定为 yyyy-MM-dd。必须将格式指定为字符向量,即使 str 是字符串数组。
t = datetime(str,'InputFormat','yyyy-MM-dd')
t = 1×2 datetime
24-Mar-2016 19-Apr-2016
从表示毫秒精度的日期和时间的文本创建一个 datetime 值。要转换 datetime 函数需要更多信息才能解析其格式的文本,请指定 'InputFormat' 名称-值对组参量。
d = '2018-06-25 11:23:37.712'; t = datetime(d,'InputFormat','yyyy-MM-dd HH:mm:ss.SSS')
t = datetime
25-Jun-2018 11:23:37
转换会保留小数秒。但是,默认情况下 datetime 数组不显示小数秒。要显示小数秒,请指定 'Format' 名称-值对组或 Format 属性。
t.Format = 'MMM dd, yyyy HH:mm:ss.SSS't = datetime
Jun 25, 2018 11:23:37.712
'InputFormat' 参量仅适用于从输入文本进行的转换。Format 属性指定任何 datetime 数组的显示。
将 ISO 8601 格式的日期转换为日期时间值。
创建包含 ISO 8601 格式的日期的字符向量元胞数组。在该格式下,字母 T 用作隔开日期和时间的分隔符。每个字符向量包含一个时区偏移量。字母 Z 表示与 UTC 之间无偏移量。
DateStrings = {'2014-05-26T13:30-05:00';'2014-08-26T13:30-04:00';'2014-09-26T13:30Z'}DateStrings = 3×1 cell
{'2014-05-26T13:30-05:00'}
{'2014-08-26T13:30-04:00'}
{'2014-09-26T13:30Z' }
将字符向量转换为日期时间值。指定输入格式时,将字母 T 包含在单引号中以指示它是一个字面字符。使用 TimeZone 名称-值对组参量指定输出日期时间数组的时区。
t = datetime(DateStrings,'InputFormat','uuuu-MM-dd''T''HH:mmXXX','TimeZone','UTC')
t = 3×1 datetime
26-May-2014 18:30:00
26-Aug-2014 17:30:00
26-Sep-2014 13:30:00
t 中的日期时间值以默认格式显示。
创建包含用法语表示的日期的字符向量元胞数组。
C = {'8 avril 2013','9 mai 2013';'10 juin 2014','11 juillet 2014'}C = 2×2 cell
{'8 avril 2013'} {'9 mai 2013' }
{'10 juin 2014'} {'11 juillet 2014'}
将 C 中字符向量转换为日期时间值。如果您计算机的区域设置是使用英语,则必须指定 'Locale' 名称-值对组参量来指示字符串是用法语表示的。
t = datetime(C,'InputFormat','d MMMM yyyy','Locale','fr_FR')
t = 2×2 datetime
08-Apr-2013 09-May-2013
10-Jun-2014 11-Jul-2014
t 中的日期时间值以默认格式和 MATLAB® 所使用的语言显示,具体取决于您的系统区域设置。
根据单个年、月和日值数组创建一个 datetime 数组。
创建年值为 Y、日值为 D 的示例数值数组。在本例中,月值 M 是标量。
Y = [2014;2013;2012]; M = 01; D = [31;30;31];
创建数组 datetime。
t = datetime(Y,M,D)
t = 3×1 datetime
31-Jan-2014
30-Jan-2013
31-Jan-2012
使用 Format 名称-值对组参量指定输出的自定义显示格式。
t = datetime(Y,M,D,'Format','eeee, MMMM d, y')
t = 3×1 datetime
Friday, January 31, 2014
Wednesday, January 30, 2013
Tuesday, January 31, 2012
创建一个由 Excel® 日期数字组成的示例数组,这些日期数字表示自 1900 年 1 月 0 日以来的众多日期。
X = [39558, 39600; 39700, 39800]
X = 2×2
39558 39600
39700 39800
将 X 中的值转换为日期时间值。
t = datetime(X,'ConvertFrom','excel')
t = 2×2 datetime
20-Apr-2008 01-Jun-2008
09-Sep-2008 18-Dec-2008
提示
要查看
datetime函数列表,请参阅日期和时间。有关接受
datetime数组作为输入参量的 MATLAB 核心函数的列表,请参阅支持日期和时间数组的核心函数。
扩展功能
datetime 函数支持 tall 数组,但存在以下使用说明和限制:
为字符串数组或元胞数组中的字符向量创建 tall 日期时间数组时,请始终指定输入日期时间格式。
如果您将
'Format'指定为'preserveinput',则 MATLAB 可能需要计算 tall 数组以确定格式。
有关详细信息,请参阅 tall 数组。
用法说明和限制:
从 R2020a 开始,您可以在 MATLAB 代码中使用
datetime数组来进行代码生成。有关详细信息,请参阅日期时间数组的代码生成 (MATLAB Coder)和代码生成的日期时间数组限制 (MATLAB Coder)。
基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。
用法说明和限制:
从
DateStrings中的文本创建datetime数组时,请指定输入格式infmt。
有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2014b 中推出对于常见日期和时间格式,datetime 格式解析性能显著提高。由常见分隔符分隔的字母标识符组成的大多数日期和时间格式都表现出性能改进。
字母标识符指定格式分量,如日期字段、时间字段和时区偏移量。有关标识符的列表,请参阅
datetimeFormat属性。常见分隔符是
":"、";"、","、"."、"-"、"/"和空白字符。
常见输入格式的示例包括:
"dd.MM.uuuu""MM/dd/uuuu""uuuu MM dd""HH:mm, dd MMMM uuuu Z""uuuu MMM dd HH:mm:ss.SSS a ZZZZZ""uuuu-MM-dd'T'HH:mm""QQQ/uuuu"
在 R2025a 中,对于包含 D、G、Q、QQ、W、y、yy 和 z 的输入格式,性能没有改进。(仅影响上文中列出的标识符。当使用 QQQ 或 yyyy 等标识符时,仍可能表现出性能改进。)
使用 datetime 函数解析和转换文本的代码通常快 4-17 倍,具体取决于输入数组的大小和格式。例如,以下代码显示了解析性能改进的示例。它创建一个使用句点作为分隔符的日期字符串数组。该字符串数组中的日期使用 dd.MM.uuuu 格式。然后,代码使用 datetime 函数来解析和转换字符串数组。代码的执行速度比上一版本大约快 9.6 倍。
function timingTest s = randi([1,31],1e6,1) + ".10.2024"; d = datetime(s,InputFormat="dd.MM.uuuu"); end
大致的执行时间是:
R2024b:3.27 秒
R2025a:0.34 秒
此代码是在运行 Windows® 11 的 AMD EPYC™ 74F3 24 核处理器 @ 3.19 GHz 测试系统上使用 timeit 函数计时的。
timeit(@timingTest)
在解析包含本地化名称或时区偏移量的常用格式时,datetime 格式解析性能显著提高。下面列出几个此类格式的示例,它们是我们正在进行的 datetime 格式解析性能改进工作的一部分:
dd-MMM-uuuu HH:mm:ssMMMM/dd/uuuuQQQ-uuuuuuuu-MM-dd HH:mm:ss Zuuuu-MM-dd HH:mm:ss.SSS xxx
例如,以下代码会创建一个日期字符串数组,这些日期使用四月的本地化缩写。该字符串数组中的日期使用 dd-MMM-uuuu HH:mm:ss 格式,其中 MMM 设定符表示月份的缩写名称。然后,代码使用 datetime 函数来解析和转换字符串数组。该代码比上一版本大约快 17 倍。
function timingTest s = "23-Apr-2024 11:30:" + randi([10,59],10000,1); for i = 1:100 d = datetime(s, ... InputFormat="dd-MMM-uuuu HH:mm:ss", ... Locale="en_US"); end end
大致的执行时间是:
R2024a:4.75 秒
R2024b:0.27 秒
同样,以下代码会创建一个时区偏移量为 -0400 的日期字符串数组。该字符串数组中的日期使用 uuuu-MM-dd HH:mm:ss.SSS Z 格式,其中 Z 设定符表示时区偏移量。然后,代码使用 datetime 函数来解析和转换字符串数组。代码的执行速度比上一版本大约快 5.8 倍。
function timingTest s = "2024-04-23 11:32:48." + randi(999,10000,1) + " -0400"; for i = 1:100 d = datetime(s, ... InputFormat="uuuu-MM-dd HH:mm:ss.SSS Z", ... TimeZone="local"); end end
大致的执行时间是:
R2024a:6.35 秒
R2024b:1.10 秒
在这两种情况下,此代码是在运行 Windows 11 的 AMD EPYC 74F3 24 核处理器 @ 3.19 GHz 测试系统上使用 timeit 函数计时的。
timeit(@timingTest)
在解析一些常见格式时,datetime 格式解析性能显著提高。通常,对于仅使用数值设定符的格式(如 ISO 8601 格式)的文本时间戳,解析性能最好。下面列出几个此类格式的示例,它们是我们正在进行的 datetime 格式解析性能改进工作的一部分:
uuuu-MM-dd和yyyy-MM-ddMM/dd/uuuu和MM/dd/yyyyuuuu-MM-dd'T'HH:mm:ss.SSS'Z'和yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
例如,以下代码创建一个包含一系列日期的字符串数组,然后对其进行解析。该字符串数组中的日期采用 uuuu-MM-dd 数值格式。datetime 函数识别该格式、解析字符串并返回 datetime 值。代码的执行速度比上一版本大约快 16 倍。
function timingTest() d1 = datetime(2024,1,1:10000); s = string(d1,"uuuu-MM-dd"); for i = 1:100 d2 = datetime(s); end end
大致的执行时间是:
R2023b:3.13 秒
R2024a:0.19 秒
此代码是在运行 Windows 11 的 AMD® EPYC 74F3 24 核处理器 @ 3.19 GHz 测试系统上使用 timeit 函数计时的:
timeit(@timingTest)
从 R2020a 开始,当您在 'InputFormat' 名称-值参量中为星期几、月份或季度指定包含一个或两个字母的标识符时,这些标识符不再识别名称。它们只识别数字。
同样,缩写的星期几、月份和季度名称的包含三个字母的标识符不再识别全名。它们只识别缩写。
下表显示这些标识符以及可识别的值和不可识别的值的示例。
标识符 | 识别的示例 | 无法识别的示例 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
在以前的版本中,所有这些包含一个、二个和三个字母的标识符分别识别星期几、月份和季度的缩写和全名。例如,ee 将 Wed 识别为星期三,MM 将 Apr 识别为四月,QQ 将 Q2 识别为第二季度。同样,eee 识别 Wednesday,MMM 识别 April,QQQ 识别 2nd quarter。
有关格式标识符的详细信息,请参阅 datetime 的 Format 属性。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)