MATLAB时间数据处理函数
我们可能经常要处理时间格式的数据,一些实验设备的输出都是相应的时间格式的数据,今天主要介绍MATLAB常用的时间数据格式处理函数。
1、datetime - 表示时间点的数组
datetime 数组使用前 ISO 日历表示时间点。datetime 值具有灵活的显示格式,最高可达纳秒精度,并且会考虑时区、夏令时和闰秒。
t = datetime
t = datetime(relativeDay)
t = datetime(DateStrings)
t = datetime(DateStrings,'InputFormat',infmt)
t = datetime(DateVectors)
t = datetime(Y,M,D)
t = datetime(Y,M,D,H,MI,S)
t = datetime(Y,M,D,H,MI,S,MS)
t = datetime(X,'ConvertFrom',dateType)
t = datetime(___,Name,Value)
说明
t=datetime 返回一个对应于当前日期和时间的标量 datetime 数组。
t=datetime(relativeDay) 使用 relativeDay 指定的日期。relativeDay 输入可以是 'today'、
'tomorrow'、'yesterday' 或 'now'。
t=datetime(DateStrings) 根据表示时间点的 DateStrings 中的文本创建一个日期时间值数组。
t=datetime(DateStrings,'InputFormat',infmt) 使用由 infmt 指定的格式来解释 DateStrings。
DateStrings 中的所有值必须具有相同格式。
要避免理解不清类似的格式,请指定 'InputFormat' 及其相应的值 infmt。
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(X,'ConvertFrom',dateType) 将 X 中的数值转换为 datetime 数组 t。dateType 参数指
定 X 中的值的类型。
如果 X 包含 POSIX时间或表示本地时间的儒略日期,请使用 'TimeZone' 名称-值对组参数为 t 指定
适当的时区。如果不指定时区,X 中的 POSIX 时间或儒略日期将被视为 UTC 时间,而不是本地时间。
t=datetime(___,Name,Value) 使用一个或多个名称-值对组参数以及先前语法中的任何输入参数来指定
其他选项。例如,您可以使用 'Format' 名称-值对组参数指定 t 的显示格式。
要在根据文本创建日期时间值时获得最佳性能,请指定 'Format' 或 'InputFormat' 及其相应的
值 infmt。
2、datenum将日期和时间转换为日期数字序列
datenum 函数创建一个数值数组,将每个时间点表示为从 0000 年 1 月 0 日起的天数。数值还能表示以天为单位的过去时间。但是,表示时间点的最佳方式是使用 datetime 数据类型。表示过去的时间的最佳方式是使用 duration 或 calendarDuration 数据类型。
语法
DateNumber = datenum(t)
DateNumber = datenum(DateString)
DateNumber = datenum(DateString,formatIn)
DateNumber = datenum(DateString,PivotYear)
DateNumber = datenum(DateString,formatIn,PivotYear)
DateNumber = datenum(DateVector)
DateNumber = datenum(Y,M,D)
DateNumber = datenum(Y,M,D,H,MN,S)
说明
DateNumber datenum(t) 将 datetime 数组 t 中的日期时间值转换为日期数字序列。
日期序列数表示某个固定的预设日期(0000 年 1 月 0 日)以来的整个天数及其小数值,采用前 ISO
日历形式。
DateNumber=datenum(DateString) 将日期字符串转换为日期数字串。如果日期字符串格式已知,
则使用 formatIn。不含 formatIn 的语法的执行速度远远慢于包含此项的语法执行速度。
DateNumber=datenum(DateString,formatIn) 使用 formatIn 来解释每个日期字符串。
DateNumber=datenum(DateString,PivotYear) 使用 PivotYear 来解释以双字符形式指定年份的日
期字符串。如果日期字符串格式已知,则使用 formatIn。不含 formatIn 的语法的执行速度远远慢于
包含此项的语法执行速度。
DateNumber=datenum(DateString,formatIn,PivotYear) 使用 formatIn 来解释每个日期字符串,
并使用 PivotYear 来解释以双字符形式指定年份的日期字符串。可以按任一顺序指定 formatIn 和
PivotYear。
DateNumber=datenum(DateVector) 将日期矢量解释为日期数字串,并返回由 m 个日期数字构
成的列矢量,其中 m 是 DateVector 中日期矢量的总数。
DateNumber=datenum(Y,M,D) 返回 Y、M 和 D(年、月、日)数组的对应元素的日期数字串。
这些数组的大小必须相同(或者,其中任一数组可以是标量)。还可以将输入参数指定为日期
矢量 [Y,M,D]。
DateNumber=datenum(Y,M,D,H,MN,S) 另外返回 H、MN 和 S(小时、分、秒)数组的对应元素
的日期数字串。这些数组的大小必须相同(或者,其中任一数组可以是标量)。还可以将输入参数
指定为日期矢量 [Y,M,D,H,MN,S]。
3、datevec 将日期和时间转换为分量的向量
datevec 函数创建一个数值数组,数组的值表示年、月、日、小时、分钟和秒这些日期和时间组件。但是,表示时间点的最佳方式是使用 datetime 数据类型。表示过去的时间的最佳方式是使用 duration 或 calendarDuration 数据类型。
语法
DateVector = datevec(t)
DateVector = datevec(DateNumber)
DateVector = datevec(DateString)
DateVector = datevec(DateString,formatIn)
DateVector = datevec(DateString,PivotYear)
DateVector = datevec(DateString,formatIn,PivotYear)
[Y,M,D,H,MN,S] = datevec(___)
说明
DateVector=datevec(t) 将输入数组 t 中的日期时间或持续时间值转换为日期向量。
datevec 函数返回一个 m×6 矩阵,其中每行对应于 t 中的一个值。
DateVector=datevec(DateNumber) 将一个或多个日期数字转换为日期向量。
datevec 函数返回一个 m×6 矩阵,它包含 m 个日期向量,其中 m 是 DateNumber 中的日期数字的
DateVector=datevec(DateString) 可将表示日期和时间的文本转换为日期向量。
如果已知文本中使用的格式,则将格式指定为 formatIn。不含 formatIn 的语法的执行速度远远慢于
包含此项的语法执行速度。
DateVector=datevec(DateString,formatIn) 使用 formatIn 解析 DateString 所表示的日期和时间。
DateVector=datevec(DateString,PivotYear) 使用 PivotYear 解析以两个字符指定年份的文本。
如果已知文本中使用的格式,则将格式指定为 formatIn。不含 formatIn 的语法的执行速度远远
慢于包含此项的语法执行速度。
DateVector=datevec(DateString,formatIn,PivotYear) 使用 formatIn 解析 DateString 表示
的日期和时间,使用 PivotYear 解析以两个字符指定年份的文本。可以按任一顺序指定 formatIn
和 PivotYear。
[Y,M,D,H,MN,S]=datevec(___) 返回日期向量的分量作为单独的变量 Y、M、D、H、MN 和 S
(分别代表年、月、日、时、分和秒)。datevec 函数返回毫秒作为秒 (S) 输出的小数部分。
时间函数:
datestr(d,f) 将日期数字转换为字符串
datenum(str,f) 将字符串转换为日期数字
datevec(str) 日期字符串转换向量
weekday(d) 计算星期数
eomday(yr,mth) 计算指定月份最后一天
calendar(str) 返回日历矩阵
clock 当前日期和时间的日期向量
date 当前日期字符串
now 当前日期和时间的序列数
tic %开始计时
toc %计时结束
日期字符串格式 | 示例 |
'dd-mmm-yyyy HH:MM:SS' | 01-Mar-2000 15:45:17 |
'dd-mmm-yyyy' | 01-Mar-2000 |
'mm/dd/yyyy' | 03/01/2000 |
'mm/dd/yy' | 03/01/00 |
'mm/dd' | 03/01 |
'mmm.dd,yyyy HH:MM:SS' | Mar.01,2000 15:45:17 |
'mmm.dd,yyyy' | Mar.01,2000 |
'yyyy-mm-dd HH:MM:SS' | 2000-03-01 15:45:17 |
'yyyy-mm-dd' | 2000-03-01 |
'yyyy/mm/dd' | 2000/03/01 |
'HH:MM:SS' | 15:45:17 |
'HH:MM:SS PM' | 3:45:17 PM |
'HH:MM' | 15:45 |
'HH:MM PM' | 3:45 PM |
1、示例1
在本地系统时区中指定当前日期和时间。
t = datetime('now','TimeZone','local','Format','d-MMM-y HH:mm:ss Z')
datetime
9-1月-2022 22:00:35 +0800
在韩国首尔表示的时区中指定当前日期和时间。
t = datetime('now','TimeZone','Asia/Seoul','Format','d-MMM-y HH:mm:ss Z')
datetime
9-1月-2022 23:01:53 +0900
基于字符向量元胞数组创建 datetime 数组。
DateStrings = {'2014-05-26';'2014-08-03'};
t = datetime(DateStrings,'InputFormat','yyyy-MM-dd')
2×1 datetime 数组
2014-05-26
2014-08-03
使用 string 函数创建字符串数组,并将其转换为日期时间值。
str = string({'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')
1×2 datetime 数组
2016-03-24 2016-04-19
从表示小数秒的文本转换为时间
d = '2018-06-25 11:23:37.712';
t = datetime(d,'InputFormat','yyyy-MM-dd HH:mm:ss.SSS')
datetime
2018-06-25 11:23:37
t.Format = 'MMM dd, yyyy HH:mm:ss.SSS'
datetime
6月 25, 2018 11:23:37.712
将 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')
3×1 datetime 数组
2014-05-26 18:30:00
2014-08-26 17:30:00
2014-09-26 13:30:00
从外语文本创建日期和时间
创建包含用法语表示的日期的字符向量元胞数组。
C = {'8 avril 2013','9 mai 2013';'10 juin 2014','11 juillet 2014'}
2×2 cell 数组
{'8 avril 2013'} {'9 mai 2013' }
{'10 juin 2014'} {'11 juillet 2014'}
基于向量的日期和时间
根据单个年、月和日值数组创建一个 datetime 数组。创建年值为 Y、日值为 D 的示例数值数组。在本例中,月值 M 是标量。
Y = [2014;2013;2012];
M = 01;
D = [31;30;31];
t = datetime(Y,M,D)
3×1 datetime 数组
2014-01-31
2013-01-30
2012-01-31
t = datetime(Y,M,D,'Format','eeee, MMMM d, y')
3×1 datetime 数组
星期五, 一月 31, 2014
星期三, 一月 30, 2013
星期二, 一月 31, 2012
2、示例2
将日期时间数组转换为日期数字
format long
t = [datetime('now');datetime('tomorrow')]
DateNumber = datenum(t)
2×1 datetime 数组
2022-01-09 22:26:39
2022-01-10 00:00:00
7.385309351806945
7.385310000000000
将日期字符串转换为日期数字
DateString = '19-May-2001';
formatIn = 'dd-mmm-yyyy';
datenum(DateString,formatIn)
ans =
730990
将多个日期字符串转换为日期数字
DateString = {'09/16/2007';'05/14/1996';'11/29/2010'};
formatIn = 'mm/dd/yyyy';
datenum(DateString,formatIn)
ans =
733301
729159
734471
使用基准年份将日期字符串转换为日期数字
n = datenum('12-jun-17','dd-mmm-yy')
736858
将日期矢量转换为日期数字
datenum([2009,4,2,11,7,18])
ans =
7.338654634027778e+05
将年份、月份和日期转换为日期数字
n = datenum(2001,12,19)
731204
3、示例3
将日期时间数组转换为日期向量
format short g
t = [datetime('now');datetime('tomorrow')]
2×1 datetime 数组
2022-01-09 22:42:37
2022-01-10 00:00:00
DateVector = datevec(t)
DateVector =
2022 1 9 22 42 37.43
2022 1 10 0 0 0
将日期数字转换为日期向量
format short g
n = 733779.651;
datevec(n)
ans =
2009 1 6 15 37 26.4
将表示日期的文本转换为日期向量
DateString = '28.03.2005';
formatIn = 'dd.mm.yyyy';
datevec(DateString,formatIn)
ans =
2005 3 28 0 0 0
4、绘制日期线图
clc;
clear all;
close all;
time = datetime(2021,1,9) + calweeks(0:14);
y = rand(1,15);
figure;
plot(time,y,'r-*');
xtickformat('dd-MMM-yyyy')
绘制持续时间线图
clc;
clear all;
close all;