Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

在日期时间数组、数值和文本之间转换

概述

datetime 是表示时间点的最佳数据类型。datetime 值具有灵活的显示格式,最高可达纳秒级精度,并能将时区、夏令时和闰秒因素计算在内。但如果需要处理在 MATLAB® R2014a 或更早版本中编写的代码,或者与使用此类版本的其他人共享代码,则可能需要处理存储为以下三种格式之一的日期和时间:

  • 日期字符串 - 一个字符向量。

    Example:  Thursday, August 23, 2012  9:45:44.946 AM
  • 日期向量 - 一个 1x6 数值向量,包含年、月、日、时、分和秒。

    Example:  [2012   8    23    9    45    44.946]
    
  • 日期序列值 - 等于 ISO 日历(指定使用公历日历)中自 0000 年 1 月 0 日以来的天数的单个数值。日期序列值适合用作某些不接受 datetimeduration 数据类型的 MATLAB 函数的输入。

    Example:  7.3510e+005

日期字符串、向量和数字可以作为值数组存储。可将多个日期字符串存储在字符向量元胞数组中,多个日期向量存储在 m×6 矩阵中,多个日期序列值存储在矩阵中。

您可以使用 datetime 函数将上述任意格式转换为 datetime 数组。如果您现有的 MATLAB 代码只能接受日期序列值或日期向量,请分别使用 datenumdatevec 函数将 datetime 数组转换为期望的日期格式。要将 datetime 数组转换为字符向量,请使用 charcellstr 函数。

从 R2016b 开始,您也可以使用 string 函数将 datetime 数组转换为字符串数组。

在日期时间和字符向量之间转换

日期字符串可以是一个包含与特定日期和/或时间有关的字段的字符向量。可以通过多种方式以文本格式表示日期和时间。例如,以下所有内容均为表示 2010 年 8 月 23 日下午 04:35:42 的字符向量:

'23-Aug-2010 04:35:06 PM'
'Wednesday, August 23'
'08/23/10 16:35'
'Aug 23 16:35:42.946'

日期字符串包含分隔字段的字符,例如下面使用的连字符、空格和冒号:

d = '23-Aug-2010 16:35:42'	

使用 datetime 函数将一个或多个日期字符串转换为 datetime 数组。为了获得最佳性能,请将输入日期字符串的格式指定为 datetime 的输入参数。

注意

datetime 用于描述日期和时间格式的设定符与 datestrdatevecdatenum 函数接受的设定符有所不同。

有关日期和时间格式设定符的完整列表,请参阅 datetime 数据类型的 Format 属性。

t = datetime(d,'InputFormat','dd-MMM-yyyy HH:mm:ss')
t = 

  datetime

   23-Aug-2010 16:35:42

虽然日期字符串 ddatetime 标量 t 类似,但它们并不相等。查看每个变量的大小和数据类型。

whos d t
  Name      Size            Bytes  Class       Attributes

  d         1x20               40  char                  
  t         1x1                17  datetime              

使用 charcellstrdatetime 数组转换为字符向量。例如,将当前日期和时间转换为时间戳以附加到文件名。

t = datetime('now','Format','yyyy-MM-dd''T''HHmmss')
t = 

  datetime

   2017-01-03T151105
S = char(t);
filename = ['myTest_',S]
filename =

    'myTest_2017-01-03T151105'

在日期时间和字符串数组之间转换

从 R2016b 开始,您可以使用 string 函数来创建字符串数组。如果字符串数组包含日期字符串,则您可以使用 datetime 函数将字符串数组转换为 datetime 数组。同样地,您可以使用 string 函数将 datetime 数组转换为字符串数组。

转换字符串数组。MATLAB 用双引号来显示字符串。为了获得最佳性能,请将输入日期字符串的格式指定为 datetime 的输入参数。

str = string({'24-Oct-2016 11:58:17';
              '19-Nov-2016 09:36:29';
              '12-Dec-2016 10:09:06'})
str = 

  3×1 string array

    "24-Oct-2016 11:58:17"
    "19-Nov-2016 09:36:29"
    "12-Dec-2016 10:09:06"
t = datetime(str,'InputFormat','dd-MMM-yyyy HH:mm:ss')
t = 

  3×1 datetime array

   24-Oct-2016 11:58:17
   19-Nov-2016 09:36:29
   12-Dec-2016 10:09:06

datetime 值转换为字符串。

t = datetime('25-Dec-2016 06:12:34');
str = string(t)
str = 

     "25-Dec-2016 06:12:34"

在日期时间和日期向量之间转换

日期向量是一个包含双精度数的 1x6 向量。日期向量的元素为整数值,但秒元素例外,它可以为小数。时间值采用 24 小时表示法表示。没有 AM 或 PM 设置。

日期向量按以下顺序排列:

year month day hour minute second

以下日期向量表示 2012 年 10 月 24 日上午 10:45:07:

[2012  10  24  10  45  07]

使用 datetime 函数将一个或多个日期向量转换为 datetime 数组:

t = datetime([2012  10  24  10  45  07])
t = 

  datetime

   24-Oct-2012 10:45:07

使用 yearmonthday 等函数(而不使用 datevec)来提取日期时间值的分量:

y = year(t)
y =

        2012

或者,访问相应的属性,例如使用 t.Year 访问年值:

y = t.Year
y =

        2012

将日期序列值转换为日期时间

日期序列值将日历日期表示为自固定的基准日期后经过的天数。在 MATLAB 中,日期序列值 1 表示 0000 年 1 月 1 日。

时间序列可以表示小数形式的天数(从午夜开始);例如,6 p.m. 等于 0.75 序列天。因此,MATLAB 中的字符向量 '31-Oct-2003, 6:00 PM' 是日期数字 731885.75。

使用 datetime 函数将一个或多个日期序列值转换为 datetime 数组。请指定要转换的日期数字的类型:

t = datetime(731885.75,'ConvertFrom','datenum')
t = 

  datetime

   31-Oct-2003 18:00:00

将日期时间数组转换为数值

部分 MATLAB 函数接受数值数据类型,但不接受日期时间值作为输入参数。如要将这些函数应用于日期和时间数据,请先将日期时间值转换为有意义的数值。然后,再调用函数。例如,log 函数接受 double 输入,但不接受 datetime 输入。假设您有一个 datetime 数组,其中的日期跨越了一项研究或试验的整个过程。

t = datetime(2014,6,18) + calmonths(1:4)
t = 

  1×4 datetime array

   18-Jul-2014   18-Aug-2014   18-Sep-2014   18-Oct-2014

减去原点值。例如,起点值可能是某个试验的开始日期。

dt = t - datetime(2014,7,1)
dt = 

  1×4 duration array

    408:00:00   1152:00:00   1896:00:00   2616:00:00

dt 是一个 duration 数组。分别使用 yearsdayshoursminutesseconds 函数,将 dt 转换为以年、日、时、分或秒为单位的值的 double 数组。

x = hours(dt)
x =

         408        1152        1896        2616

double 数组作为输入传递给 log 函数。

y = log(x)
y =

    6.0113    7.0493    7.5475    7.8694

另请参阅

| | | | | |

相关主题