添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
MATLAB时间数据处理函数

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;