Matlab:在文本和值之间转换datetimeduration
- 将值转换为文本datetimeduration
- 将数组转换为字符串数组
- 指定输出文本的格式
- 指定输出文本的区域设置
- 将文本转换为值datetime
- 解释输入文本的格式
- 将文本转换为值duration
- 解释输入文本的格式
- 从文件中读取日期和时间
此示例演示如何在表示日期和时间的文本和数据类型之间进行转换。数据类型表示时间点,例如 2020 年 8 月 24 日上午 10:50:30,数据类型表示时间长度,例如 3 小时 47 分和 16 秒。将日期和时间转换为文本的常见原因是将它们追加到用作打印标签或文件名的字符串中。同样,如果文件具有将日期和时间存储为文本的数据列,则可以从这些列读取数据到数组中,从而使数据对分析更有用。datetimedurationdatetimeduration
要转换:
datetime或值到文本,使用函数。(您还可以使用函数将这些值转换为字符向量。durationstringchar
文本到值,使用函数。datetimedatetime
文本到值,使用函数。durationduration
此外,某些函数(如 、 和函数)从文件中读取文本并自动转换表示日期和时间 toorarray 的文本。readcellreadvarsreadtabledatetimeduration
将值转换为文本datetimeduration
创建一个表示当前日期和时间的值。datetime
d = datetime("now")
d = datetime
31-Aug-2022 03:28:25
要转换为文本,请使用函数。dstring
str = string(d)
str =
“31-Aug-2022 03:28:25”
同样,您可以转换值。例如,首先创建一个表示 3 小时 30 分钟的值。创建此值的一种方法是使用 theandfunctions。这些函数创建随后可以组合的值。durationdurationhoursminutesduration
d = hours(3) + minutes(30)
d = duration
3.5 hr
转换为文本。d
str = string(d)
str =
“3.5 hr”
此类字符串的一个常见用途是将它们添加到打印标签或文件名中。例如,创建一个标题包含当前日期的简单绘图。首先转换日期并将其添加到字符串中。myTitle
d = datetime("today")
d = datetime
31-Aug-2022
myTitle = "Plot generated on: " + string(d)
myTitle =
“Plot generated on: 31-Aug-2022”
使用标题创建绘图。
plot(rand(10,1))
title(myTitle)
将数组转换为字符串数组
您还可以将数组转换为值。当您使用函数转换它们时,生成的字符串数组具有相同的大小。datetimedurationstring
例如,创建阵列。datetime
D = datetime(2021,1:3,15,12,0,0)'
D = 3x1 datetime
15-Jan-2021 12:00:00
15-Feb-2021 12:00:00
15-Mar-2021 12:00:00
转换为字符串数组。D
str = string(D)
str = 3x1 string
“15-Jan-2021 12:00:00”
“15-Feb-2021 12:00:00”
“15-Mar-2021 12:00:00”
同样,您可以创建数组并对其进行转换。创建数组的一种方法是使用函数。使用指定小时、分钟和秒的数字输入调用它。durationdurationduration
D = duration(1:3,30,0)'
D = 3x1 duration
01:30:00
02:30:00
03:30:00
转换数组。duration
str = string(D)
str = 3x1 string
“01:30:00”
“02:30:00”
“03:30:00”
指定输出文本的格式
数据类型具有指定显示格式的属性。实时脚本和命令窗口使用该格式来显示值。使用函数转换数组时,可以指定不同的格式。datetimedurationdatetimedurationstring
例如,创建一个值并显示它。datetime
d = datetime("now")
d = datetime
31-Aug-2022 03:28:26
使用字母标识符指定月份、日、年和时间全名的格式。转换为使用该格式表示日期和时间的字符串。d
fmt = "dd MMMM yyyy, hh:mm:ss a";
str = string(d,fmt)
str =
“31 August 2022, 03:28:26 AM”
同样,您可以在转换数组时指定格式。首先创建一个值。durationduration
d = hours(1) + minutes(30) + seconds(45)
d = duration
1.5125 hr
使用小时、分钟和秒标识符转换为字符串。dhh:mm:ss
fmt = "hh:mm:ss";
string(d,fmt)
ans =
“01:30:45”
注意:该函数在转换其他数据类型时不会为格式提供第二个输入参数。string
指定输出文本的区域设置
您还可以使用不同的语言环境进行转换和数组。区域设置为日期和月份提供适当的名称。要使用不是默认区域设置的区域设置,请将其作为另一个输入参数提供。datetimeduration
例如,指定区域设置以使用月份的法语名称表示当前日期和时间。fr_FR
d = datetime("now")
d = datetime
31-Aug-2022 03:28:26
fmt = "dd MMMM yyyy, hh:mm:ss a";
locale = "fr_FR";
str = string(d,fmt,locale)
str =
“31 août 2022, 03:28:26 AM”
同样,您可以在转换数组时指定区域设置。法国的区域设置使用不同的小时缩写。duration
d = hours(5)
d = duration
5 hr
fmt = "h";
locale = "fr_FR";
str = string(d,fmt,locale)
str =
“5 h”
注意:转换其他数据类型时,该函数不会为区域设置提供第三个输入参数。string
将文本转换为值datetime
如果文本以函数识别的格式指定日期和时间,则可以将文本转换为值。datetimedatetime
创建一个表示日期和时间的字符串。
str = "2021-09-15 09:12:34"
str =
“2021-09-15 09:12:34”
Convert to a value.strdatetime
d = datetime(str)
d = datetime
15-Sep-2021 09:12:34
解释输入文本的格式
该函数可识别许多常用的文本格式。但是,如果文本的格式无法识别,则可以将该格式指定为输入参数。datetimedatetime
例如,创建一个字符串,用于使用 ISO 8601 标准指定日期和时间。
str = "2021-09-15T091234"
str =
“2021-09-15T091234”
函数无法识别此格式。若要将此字符串转换为值,请指定输入文本的格式。然后调用该函数。(当格式包含文字文本时,请用引号将其括起来。在此示例中,指定文本。datetimedatetimedatetimeT’T’
infmt = "yyyy-MM-dd'T'HHmmss";
d = datetime(str,"InputFormat",infmt)
d = datetime
15-Sep-2021 09:12:34
将文本转换为值duration
如果文本以函数识别的格式指定时间,则可以将文本转换为值。durationduration
创建一个表示时间长度的字符串。
str = "00:34:01"
str =
“00:34:01”
Convert to a value.strduration
d = duration(str)
d = duration
00:34:01
解释输入文本的格式
该函数识别指定以冒号分隔的天、小时、分钟和秒的格式。这些格式是:duration
“dd:hh:mm:ss”
“hh:mm:ss”
“mm:ss”
“hh:mm”
前三种格式中的任何一种,最多九个字符表示小数位第二位数字,例如”Shh:mm:ss.SSSS"
如果输入文本不明确,这意味着它可以被解释为匹配的理论格式,请将格式指定为输入参数。“mm:ss”“hh:mm”
例如,创建一个表示时间长度的字符串。
str = "34:01"
str =
“34:01”
若要将此字符串转换为 34 分 1 秒的持续时间,请指定格式。然后调用该函数。duration
infmt = "mm:ss";
d = duration(str,"InputFormat",infmt)
d = duration
00:34:01
从文件中读取日期和时间
许多文件(如电子表格和文本文件)将日期和时间存储为文本。如果日期和时间采用可识别的格式,则诸如,,之类的函数可以读取它们并自动将它们转换为toorarray。readcellreadvarsreadtabledatetimeduration
例如,CSV 文件是随 MATLAB® 一起分发的示例文件。该文件包含一组停电的数据。的第一行具有列名。文件的其余部分具有每次中断的逗号分隔数据值。该文件有 1468 行数据。此处显示了前几行。outages.csvoutages.csv
Region,OutageTime,Loss,Customers,RestorationTime,Cause
SouthWest,2002-02-01 12:18,458.9772218,1820159.482,2002-02-07 16:50,winter storm
SouthEast,2003-01-23 00:49,530.1399497,212035.3001,winter storm
SouthEast,2003-02-07 21:15,289.4035493,142938.6282,2003-02-17 08:14,winter storm
West,2004-04-06 05:44,434.8053524,340371.0338,2004-04-06 06:10,equipment fault
MidWest,2002-03-16 06:18,186.4367788,212754.055,2002-03-18 23:23,severe storm
…
要从中读取前三列并将它们直接存储在数组中,请使用函数。若要将文本读入存储字符串数组的变量,请指定名称-值参数。但是,该函数将 CSV 文件第二列中的值识别为日期和时间,并将变量创建为数组。显示每个输出数组的前五行。outages.csvreadvarsTextTypeOutageTimedatetime
[Region,OutageTime,Loss] = readvars("outages.csv","TextType","string");
whos Region OutageTime Loss
Name Size Bytes Class Attributes
Loss 1468x1 11744 double
OutageTime 1468x1 23520 datetime
Region 1468x1 83256 string
Loss(1:5)
ans = 5×1
458.9772
530.1399
289.4035
434.8054
186.4368
OutageTime(1:5)
ans = 5x1 datetime
2002-02-01 12:18
2003-01-23 00:49
2003-02-07 21:15
2004-04-06 05:44
2002-03-16 06:18
Region(1:5)
ans = 5x1 string
“SouthWest”
“SouthEast”
“SouthEast”
“West”
“MidWest”
要读取整个电子表格并将数据存储在表中,请使用函数。若要将文本读入存储字符串数组的表变量,请指定名称-值参数。但是,仍然将桑德转换为存储数组的表变量。readtableTextTypereadtableOutageTimeRestorationTimedatetime
T = readtable("outages.csv","TextType","string")
T=1468×6 table
Region OutageTime Loss Customers RestorationTime Cause
___________ ________________ ______ __________ ________________ _________________
"SouthWest" 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 "winter storm"
"SouthEast" 2003-01-23 00:49 530.14 2.1204e+05 NaT "winter storm"
"SouthEast" 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 "winter storm"
"West" 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 "equipment fault"
"MidWest" 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 "severe storm"
"West" 2003-06-18 02:49 0 0 2003-06-18 10:54 "attack"
"West" 2004-06-20 14:39 231.29 NaN 2004-06-20 19:16 "equipment fault"
"West" 2002-06-06 19:28 311.86 NaN 2002-06-07 00:51 "equipment fault"
"NorthEast" 2003-07-16 16:23 239.93 49434 2003-07-17 01:12 "fire"
"MidWest" 2004-09-27 11:09 286.72 66104 2004-09-27 16:37 "equipment fault"
"SouthEast" 2004-09-05 17:48 73.387 36073 2004-09-05 20:46 "equipment fault"
"West" 2004-05-21 21:45 159.99 NaN 2004-05-22 04:23 "equipment fault"
"SouthEast" 2002-09-01 18:22 95.917 36759 2002-09-01 19:12 "severe storm"
"SouthEast" 2003-09-27 07:32 NaN 3.5517e+05 2003-10-04 07:02 "severe storm"
"West" 2003-11-12 06:12 254.09 9.2429e+05 2003-11-17 02:04 "winter storm"
"NorthEast" 2004-09-18 05:54 0 0 NaT "equipment fault"
⋮
由于这些表变量是数组,因此您可以使用它们执行方便的计算。例如,您可以计算停电的持续时间,并将其作为阵列附加到表中。datetimeduration
T.OutageDuration = T.RestorationTime - T.OutageTime
T=1468×7 table
Region OutageTime Loss Customers RestorationTime Cause OutageDuration
___________ ________________ ______ __________ ________________ _________________ ______________
"SouthWest" 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 "winter storm" 148:32:00
"SouthEast" 2003-01-23 00:49 530.14 2.1204e+05 NaT "winter storm" NaN
"SouthEast" 2003-02-07 21:15 289.4 1.4294e+05 2003-02-17 08:14 "winter storm" 226:59:00
"West" 2004-04-06 05:44 434.81 3.4037e+05 2004-04-06 06:10 "equipment fault" 00:26:00
"MidWest" 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 "severe storm" 65:05:00
"West" 2003-06-18 02:49 0 0 2003-06-18 10:54 "attack" 08:05:00
"West" 2004-06-20 14:39 231.29 NaN 2004-06-20 19:16 "equipment fault" 04:37:00
"West" 2002-06-06 19:28 311.86 NaN 2002-06-07 00:51 "equipment fault" 05:23:00
"NorthEast" 2003-07-16 16:23 239.93 49434 2003-07-17 01:12 "fire" 08:49:00
"MidWest" 2004-09-27 11:09 286.72 66104 2004-09-27 16:37 "equipment fault" 05:28:00
"SouthEast" 2004-09-05 17:48 73.387 36073 2004-09-05 20:46 "equipment fault" 02:58:00
"West" 2004-05-21 21:45 159.99 NaN 2004-05-22 04:23 "equipment fault" 06:38:00
"SouthEast" 2002-09-01 18:22 95.917 36759 2002-09-01 19:12 "severe storm" 00:50:00
"SouthEast" 2003-09-27 07:32 NaN 3.5517e+05 2003-10-04 07:02 "severe storm" 167:30:00
"West" 2003-11-12 06:12 254.09 9.2429e+05 2003-11-17 02:04 "winter storm" 115:52:00
"NorthEast" 2004-09-18 05:54 0 0 NaT "equipment fault" NaN
⋮
该博文为原创文章,未经博主同意不得转。
本文章博客地址:https://cplusplus.blog.csdn.net/article/details/127901670