Main Content

텍스트와 datetime형 값 또는 duration형 값 간에 변환하기

이 예제에서는 날짜와 시간을 나타내는 텍스트와 데이터형 간에 변환하는 방법을 보여줍니다. datetime 데이터형은 특정 시점(예: 2020년 8월 24일, 오전 10시 50분 30초)을 나타내고 duration 데이터형은 시간의 길이(예: 3시간 47분 16초)를 나타냅니다. 날짜와 시간을 텍스트로 변환하는 일반적인 이유는 이를 플롯 레이블이나 파일 이름으로 사용되는 문자열에 추가하기 위해서입니다. 이와 유사하게 날짜와 시간을 텍스트로 저장한 데이터 열이 파일에 있는 경우 그러한 열의 데이터를 datetime형 배열 또는 duration형 배열로 읽어와 데이터를 분석에 더욱 유용하게 만들 수 있습니다.

변환 방법은 다음과 같습니다.

  • datetime형 값 또는 duration형 값을 텍스트로 변환하려면 string 함수를 사용하십시오. (char 함수를 사용하여 그러한 값을 문자형 벡터로 변환할 수도 있습니다.)

  • 텍스트를 datetime형 값으로 변환하려면 datetime 함수를 사용하십시오.

  • 텍스트를 duration형 값으로 변환하려면 duration 함수를 사용하십시오.

또한 readcell, readvars, readtable 함수 같은 일부 함수의 경우 파일에서 텍스트를 읽어와서 날짜와 시간을 나타내는 텍스트를 datetime형 배열 또는 duration형 배열로 자동으로 변환합니다.

datetime형 값 및 duration형 값을 텍스트로 변환하기

현재 날짜와 시간을 나타내는 datetime형 값을 만듭니다.

d = datetime("now")
d = datetime
   25-Jan-2024 22:03:24

d를 텍스트로 변환하려면 string 함수를 사용합니다.

str = string(d)
str = 
"25-Jan-2024 22:03:24"

이와 유사하게 duration형 값을 변환할 수 있습니다. 예를 들어, 먼저 3시간 30분을 나타내는 duration형 값을 만들어 보겠습니다. 이 값을 생성하려면 hours 함수와 minutes 함수를 사용하는 방법이 있습니다. 이러한 함수는 나중에 결합할 수 있는 duration형 값을 만듭니다.

d = hours(3) + minutes(30)
d = duration
   3.5 hr

d를 텍스트로 변환합니다.

str = string(d)
str = 
"3.5 hr"

이러한 문자열은 흔히 플롯 레이블이나 파일 이름에 추가하는 데 사용됩니다. 예를 들어, 오늘의 날짜가 포함된 제목이 있는 간단한 플롯을 만들어 보겠습니다. 먼저 날짜를 변환하고 이를 문자열 myTitle에 추가합니다.

d = datetime("today")
d = datetime
   25-Jan-2024

myTitle = "Plot generated on: " + string(d)
myTitle = 
"Plot generated on: 25-Jan-2024"

제목이 있는 플롯을 만듭니다.

plot(rand(10,1))
title(myTitle)

Figure contains an axes object. The axes object with title Plot generated on: 25-Jan-2024 contains an object of type line.

배열을 string형 배열로 변환하기

datetime형 값 또는 duration형 값으로 구성된 배열을 변환할 수도 있습니다. string 함수를 사용하여 배열을 변환하면 결과로 생성되는 string형 배열은 크기가 동일합니다.

예를 들어, 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를 string형 배열로 변환합니다.

str = string(D)
str = 3x1 string
    "15-Jan-2021 12:00:00"
    "15-Feb-2021 12:00:00"
    "15-Mar-2021 12:00:00"

마찬가지로 duration형 배열을 만들어 변환할 수 있습니다. duration형 배열을 생성하려면 duration 함수를 사용하는 방법이 있습니다. 시간, 분, 초를 지정하는 숫자형 입력값을 사용하여 이 함수를 호출합니다.

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"

출력 텍스트의 형식 지정하기

datetime 데이터형과 duration 데이터형에는 표시 형식을 지정하는 속성이 있습니다. 라이브 스크립트와 명령 창은 이 형식을 사용하여 값을 표시합니다. string 함수를 사용하여 datetime형 배열 또는 duration형 배열을 변환하는 경우 다른 형식을 지정할 수 있습니다.

예를 들어, datetime형 값을 만들고 표시해 보겠습니다.

d = datetime("now")
d = datetime
   25-Jan-2024 22:03:28

월, 일, 년, 시간의 전체 이름에 대한 문자 식별자를 사용하여 형식을 지정합니다. 이 형식을 사용하여 d를 날짜와 시간을 나타내는 string형으로 변환합니다.

fmt = "dd MMMM yyyy, hh:mm:ss a";
str = string(d,fmt)
str = 
"25 January 2024, 10:03:28 PM"

마찬가지로, duration형 배열을 변환할 때 형식을 지정할 수 있습니다. 먼저 duration형 값을 생성합니다.

d = hours(1) + minutes(30) + seconds(45)
d = duration
   1.5125 hr

시, 분, 초에 대한 식별자 hh:mm:ss를 사용하여 d를 string형으로 변환합니다.

fmt = "hh:mm:ss";
string(d,fmt)
ans = 
"01:30:45"

참고: string 함수는 다른 데이터형을 변환할 경우 형식에 대한 두 번째 입력 인수를 제공하지 않습니다.

출력 텍스트의 로캘 지정하기

다른 로캘을 사용하여 datetime형 배열 및 duration형 배열을 변환할 수도 있습니다. 로캘은 일, 월에 대한 적절한 명칭을 제공합니다. 디폴트 로캘이 아닌 다른 로캘을 사용하려면 해당 로캘을 또 다른 입력 인수로 제공하십시오.

예를 들어, 월에 대한 프랑스어 명칭을 사용하여 현재 날짜와 시간을 나타내기 위해 fr_FR을 로캘로 지정해 보겠습니다.

d = datetime("now")
d = datetime
   25-Jan-2024 22:03:28

fmt = "dd MMMM yyyy, hh:mm:ss a";
locale = "fr_FR";
str = string(d,fmt,locale)
str = 
"25 janvier 2024, 10:03:28 PM"

마찬가지로, duration형 배열을 변환할 때 로캘을 지정할 수 있습니다. 로캘이 프랑스인 경우 시간에 대해 다른 약어가 사용됩니다.

d = hours(5)
d = duration
   5 hr

fmt = "h";
locale = "fr_FR";
str = string(d,fmt,locale)
str = 
"5 h"

참고: string 함수는 다른 데이터형을 변환할 때 로캘에 대한 세 번째 입력 인수를 제공하지 않습니다.

텍스트를 datetime형 값으로 변환하기

텍스트에서 datetime 함수가 인식하는 형식으로 날짜와 시간이 지정된 경우 텍스트를 datetime형 값으로 변환할 수 있습니다.

날짜와 시간을 나타내는 문자열을 생성합니다.

str = "2021-09-15 09:12:34"
str = 
"2021-09-15 09:12:34"

strdatetime형 값으로 변환합니다.

d = datetime(str)
d = datetime
   15-Sep-2021 09:12:34

입력 텍스트의 형식 해석하기

datetime 함수는 일반적으로 사용되는 많은 텍스트 형식을 인식합니다. 하지만 텍스트가 datetime이 인식하지 못하는 형식으로 된 경우 해당 형식을 입력 인수로 지정할 수 있습니다.

예를 들어, ISO 8601 표준을 사용하여 날짜와 시간을 지정하는 문자열을 만들어 보겠습니다.

str = "2021-09-15T091234"
str = 
"2021-09-15T091234"

datetime 함수는 이 형식을 인식하지 못합니다. 이 문자열을 datetime형 값으로 변환하려면 입력 텍스트의 형식을 지정합니다. 그런 다음 datetime 함수를 호출합니다. 형식에 리터럴 텍스트가 포함된 경우 이를 따옴표로 묶으십시오. 이 예제에서는 리터럴 텍스트 T'T'로 지정합니다.

infmt = "yyyy-MM-dd'T'HHmmss";
d = datetime(str,"InputFormat",infmt)
d = datetime
   15-Sep-2021 09:12:34

텍스트를 duration형 값으로 변환하기

텍스트에서 duration 함수가 인식하는 형식으로 시간이 지정된 경우 텍스트를 duration형 값으로 변환할 수 있습니다.

시간 길이를 나타내는 문자열을 생성합니다.

str = "00:34:01"
str = 
"00:34:01"

strduration형 값으로 변환합니다.

d = duration(str)
d = duration
   00:34:01

입력 텍스트의 형식 해석하기

duration 함수는 일, 시, 분, 초를 콜론으로 구분하여 지정하는 형식을 인식합니다. 예를 들어 다음과 같은 형식입니다.

  • "dd:hh:mm:ss"

  • "hh:mm:ss"

  • "mm:ss"

  • "hh:mm"

  • 처음 세 개 형식에 소수 초(Fractional Second) 자릿수를 나타내기 위해 최대 9개의 S 문자가 추가된 형식(예: "hh: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

파일에서 날짜와 시간 읽어오기

스프레드시트 및 텍스트 파일과 같은 많은 파일에서 날짜/시간을 텍스트로 저장합니다. 날짜와 시간이 인식할 수 있는 형식인 경우 readcell, readvars, readtable 같은 함수는 이들을 읽어와 자동으로 datetime형 배열 또는 duration형 배열로 변환할 수 있습니다.

예를 들어 CSV 파일 outages.csv는 MATLAB®과 함께 배포되는 샘플 파일입니다. 이 파일에는 일련의 정전에 대한 데이터가 포함되어 있습니다. outages.csv의 첫 번째 라인에는 열 이름이 있습니다. 파일의 나머지 부분에는 각 정전에 대한 쉼표로 구분된 데이터 값이 포함되어 있습니다. 이 파일에는 1468줄의 데이터가 있습니다. 여기에는 처음 몇 개 행이 표시되어 있습니다.

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
...

outages.csv에서 처음 세 개의 열을 읽어오고 이를 배열에 직접 저장하려면 readvars 함수를 사용합니다. 텍스트를 string형 배열을 저장하는 변수로 읽어오려면 TextType 이름-값 인수를 지정합니다. 하지만 이 함수는 CSV 파일의 두 번째 열에 있는 값을 날짜와 시간으로 인식하고 OutageTime 변수를 datetime형 배열로 생성합니다. 각 출력 배열에서 처음 5개 행을 표시합니다.

[Region,OutageTime,Loss] = readvars("outages.csv","TextType","string");
whos Region OutageTime Loss
  Name               Size            Bytes  Class       Attributes

  Loss            1468x1             11744  double                
  OutageTime      1468x1             23488  datetime              
  Region          1468x1             83272  string                
Loss(1:5)
ans = 5×1

  458.9772
  530.1399
  289.4035
  434.8054
  186.4368

OutageTime(1:5)
ans = 5x1 datetime
   01-Feb-2002 12:18:00
   23-Jan-2003 00:49:00
   07-Feb-2003 21:15:00
   06-Apr-2004 05:44:00
   16-Mar-2002 06:18:00

Region(1:5)
ans = 5x1 string
    "SouthWest"
    "SouthEast"
    "SouthEast"
    "West"
    "MidWest"

전체 스프레드시트를 읽어오고 데이터를 테이블에 저장하려면 readtable 함수를 사용합니다. 텍스트를 string형 배열을 저장하는 테이블 변수로 읽어오려면 TextType 이름-값 인수를 지정합니다. 하지만 readtable은 계속해서 OutageTimeRestorationTimedatetime형 배열을 저장하는 테이블 변수로 변환합니다.

T = readtable("outages.csv","TextType","string")
T=1468×6 table
      Region            OutageTime          Loss     Customers       RestorationTime             Cause      
    ___________    ____________________    ______    __________    ____________________    _________________

    "SouthWest"    01-Feb-2002 12:18:00    458.98    1.8202e+06    07-Feb-2002 16:50:00    "winter storm"   
    "SouthEast"    23-Jan-2003 00:49:00    530.14    2.1204e+05                     NaT    "winter storm"   
    "SouthEast"    07-Feb-2003 21:15:00     289.4    1.4294e+05    17-Feb-2003 08:14:00    "winter storm"   
    "West"         06-Apr-2004 05:44:00    434.81    3.4037e+05    06-Apr-2004 06:10:00    "equipment fault"
    "MidWest"      16-Mar-2002 06:18:00    186.44    2.1275e+05    18-Mar-2002 23:23:00    "severe storm"   
    "West"         18-Jun-2003 02:49:00         0             0    18-Jun-2003 10:54:00    "attack"         
    "West"         20-Jun-2004 14:39:00    231.29           NaN    20-Jun-2004 19:16:00    "equipment fault"
    "West"         06-Jun-2002 19:28:00    311.86           NaN    07-Jun-2002 00:51:00    "equipment fault"
    "NorthEast"    16-Jul-2003 16:23:00    239.93         49434    17-Jul-2003 01:12:00    "fire"           
    "MidWest"      27-Sep-2004 11:09:00    286.72         66104    27-Sep-2004 16:37:00    "equipment fault"
    "SouthEast"    05-Sep-2004 17:48:00    73.387         36073    05-Sep-2004 20:46:00    "equipment fault"
    "West"         21-May-2004 21:45:00    159.99           NaN    22-May-2004 04:23:00    "equipment fault"
    "SouthEast"    01-Sep-2002 18:22:00    95.917         36759    01-Sep-2002 19:12:00    "severe storm"   
    "SouthEast"    27-Sep-2003 07:32:00       NaN    3.5517e+05    04-Oct-2003 07:02:00    "severe storm"   
    "West"         12-Nov-2003 06:12:00    254.09    9.2429e+05    17-Nov-2003 02:04:00    "winter storm"   
    "NorthEast"    18-Sep-2004 05:54:00         0             0                     NaT    "equipment fault"
      ⋮

이러한 테이블 변수가 datetime형 배열이므로 이를 사용하여 간편하게 계산을 수행할 수 있습니다. 예를 들어 정전이 지속된 시간을 계산하고 그 값을 테이블에 duration형 배열로 추가할 수 있습니다.

T.OutageDuration = T.RestorationTime - T.OutageTime
T=1468×7 table
      Region            OutageTime          Loss     Customers       RestorationTime             Cause          OutageDuration
    ___________    ____________________    ______    __________    ____________________    _________________    ______________

    "SouthWest"    01-Feb-2002 12:18:00    458.98    1.8202e+06    07-Feb-2002 16:50:00    "winter storm"         148:32:00   
    "SouthEast"    23-Jan-2003 00:49:00    530.14    2.1204e+05                     NaT    "winter storm"               NaN   
    "SouthEast"    07-Feb-2003 21:15:00     289.4    1.4294e+05    17-Feb-2003 08:14:00    "winter storm"         226:59:00   
    "West"         06-Apr-2004 05:44:00    434.81    3.4037e+05    06-Apr-2004 06:10:00    "equipment fault"       00:26:00   
    "MidWest"      16-Mar-2002 06:18:00    186.44    2.1275e+05    18-Mar-2002 23:23:00    "severe storm"          65:05:00   
    "West"         18-Jun-2003 02:49:00         0             0    18-Jun-2003 10:54:00    "attack"                08:05:00   
    "West"         20-Jun-2004 14:39:00    231.29           NaN    20-Jun-2004 19:16:00    "equipment fault"       04:37:00   
    "West"         06-Jun-2002 19:28:00    311.86           NaN    07-Jun-2002 00:51:00    "equipment fault"       05:23:00   
    "NorthEast"    16-Jul-2003 16:23:00    239.93         49434    17-Jul-2003 01:12:00    "fire"                  08:49:00   
    "MidWest"      27-Sep-2004 11:09:00    286.72         66104    27-Sep-2004 16:37:00    "equipment fault"       05:28:00   
    "SouthEast"    05-Sep-2004 17:48:00    73.387         36073    05-Sep-2004 20:46:00    "equipment fault"       02:58:00   
    "West"         21-May-2004 21:45:00    159.99           NaN    22-May-2004 04:23:00    "equipment fault"       06:38:00   
    "SouthEast"    01-Sep-2002 18:22:00    95.917         36759    01-Sep-2002 19:12:00    "severe storm"          00:50:00   
    "SouthEast"    27-Sep-2003 07:32:00       NaN    3.5517e+05    04-Oct-2003 07:02:00    "severe storm"         167:30:00   
    "West"         12-Nov-2003 06:12:00    254.09    9.2429e+05    17-Nov-2003 02:04:00    "winter storm"         115:52:00   
    "NorthEast"    18-Sep-2004 05:54:00         0             0                     NaT    "equipment fault"            NaN   
      ⋮

참고 항목

| | | | | | | | | | | |

관련 항목

외부 웹사이트