Main Content

날짜/시간 비교하기

이 예제에서는 관계 연산자와 비교 함수를 사용하여 날짜, 시간 및 기간을 비교하는 방법을 보여줍니다. datetimeduration 데이터형은 날짜와 시간을 정량적으로 나타내므로 숫자형 배열을 비교하는 데 사용하는 것과 동일한 관계 연산자를 사용할 수 있습니다. 하지만 비교는 데이터형에 따라 약간 다른 의미를 갖습니다.

  • datetime형 값은 다른 datetime형 값보다 이전 시점이거나, 동일한 시점이거나, 이후 시점일 수 있습니다.

  • duration형 값은 다른 duration형 값보다 시간의 길이가 짧거나 동일하거나 길 수 있습니다.

calendarDuration 데이터형은 관계 연산자를 사용한 비교를 지원하지 않습니다. 달력 단위는 반드시 고정된 길이의 시간을 나타내지는 않습니다.

datetime형 배열을 비교하고 두 duration형 배열을 비교할 수 있습니다. 관계 연산자는 요소별 비교를 수행하므로 배열의 크기가 서로 호환되어야 합니다. 가장 간단한 경우는 두 개의 배열이 동일한 크기이거나 한쪽이 스칼라일 때입니다. 자세한 내용은 기본 연산에 대해 호환되는 배열 크기 항목을 참조하십시오.

날짜와 시간은 텍스트로 나타낼 수도 있고, 기간은 텍스트 및 숫자로 나타낼 수도 있습니다. 따라서 datetime형 배열을 텍스트와 비교하고 duration형 배열을 텍스트 및 숫자와 비교할 수 있습니다. 관계 연산자는 연산을 수행하기 전에 텍스트와 숫자를 올바른 데이터형으로 변환합니다.

datetime형 배열과 duration형 배열은 비교할 수 없습니다. 그러나 datetime형 배열의 성분을 숫자 또는 duration형 배열과 비교할 수 있습니다.

datetime형 값 비교하기

datetime형 배열을 만듭니다. 날짜/시간을 나타내는 텍스트를 변환하려면 datetime 함수를 사용합니다.

d1 = datetime("2022-06-05 11:37:05")
d1 = datetime
   05-Jun-2022 11:37:05

datetime형 성분인 년, 월, 일, 시, 분, 초를 나타내는 입력 숫자형 배열을 변환하여 또 다른 datetime형 배열을 만듭니다.

d2 = datetime(2022,2:4:10,15,12,0,0)
d2 = 1x3 datetime
   15-Feb-2022 12:00:00   15-Jun-2022 12:00:00   15-Oct-2022 12:00:00

두 개의 datetime형 배열을 비교합니다. 이 결과는 d2의 어떤 요소가 d1보다 이후인지 보여줍니다.

tf = d2 > d1
tf = 1x3 logical array

   0   1   1

일치하는 요소만 포함하는 datetime형 배열을 만들려면 tf를 사용하여 d2의 요소를 참조합니다.

afterd1 = d2(tf)
afterd1 = 1x2 datetime
   15-Jun-2022 12:00:00   15-Oct-2022 12:00:00

텍스트 및 datetime형 값

datetime 함수가 인식하는 형식의 날짜와 시간을 나타내는 텍스트가 있는 경우 이 텍스트를 datetime형 배열과 비교할 수 있습니다. 비교 시 묵시적으로 텍스트가 변환됩니다.

예를 들어, d2를 2022년 6월 1일을 나타내는 문자열과 비교합니다. (문자열이 날짜만 지정하는 경우 묵시적으로 datetime형으로 변환하면 시간이 자정으로 설정됩니다.) d2의 첫 번째 요소는 6월 1일보다 이전입니다.

tf = d2 >= "2022-06-01"
tf = 1x3 logical array

   0   1   1

afterJune1 = d2(tf)
afterJune1 = 1x2 datetime
   15-Jun-2022 12:00:00   15-Oct-2022 12:00:00

datetime형 배열의 수와 성분

datetime 데이터형은 datetime형 값의 성분에 대한 액세스를 제공합니다. year, quarter, month, day, hour, minute, second 함수를 사용하여 성분에 액세스합니다. 이러한 함수는 숫자를 반환하므로 이들 성분을 숫자 또는 duration형 값과 비교할 수 있습니다.

예를 들어, datetime형 배열 d2를 표시합니다. 그런 다음 월 성분을 표시합니다.

d2
d2 = 1x3 datetime
   15-Feb-2022 12:00:00   15-Jun-2022 12:00:00   15-Oct-2022 12:00:00

m = month(d2)
m = 1×3

     2     6    10

월 성분에 액세스하는 또 다른 방법은 d2Month 속성을 사용하는 것입니다. Year, Month, Day, Hour, Minute, Second 속성을 통해 datetime 성분에 액세스할 수 있습니다.

m = d2.Month
m = 1×3

     2     6    10

6월보다 이전인 d2의 요소를 찾기 위해 d2를 6월에 해당하는 숫자형 값과 비교합니다. 그런 다음 d2의 요소를 참조합니다.

tf = month(d2) < 6
tf = 1x3 logical array

   1   0   0

beforeJune = d2(tf)
beforeJune = datetime
   15-Feb-2022 12:00:00

duration형 배열 비교하기

duration형 배열을 만듭니다. hh:mm:ss 형식의 텍스트를 변환하려면 duration 함수를 사용하십시오.

t1 = duration("03:37:12")
t1 = duration
   03:37:12

시, 분, 초를 나타내는 입력 숫자형 배열을 변환하여 또 다른 duration형 배열을 만듭니다.

t2 = duration(0:2:6,30,0)
t2 = 1x4 duration
   00:30:00   02:30:00   04:30:00   06:30:00

두 개의 duration형 배열을 비교합니다. 이 결과는 t2의 어떤 요소가 t1보다 긴지 보여줍니다.

tf = t2 > t1
tf = 1x4 logical array

   0   0   1   1

일치하는 요소만 포함하는 새 duration형 배열을 만들려면 tf를 사용하여 t2의 요소를 참조합니다.

longerThanT1 = t2(tf)
longerThanT1 = 1x2 duration
   04:30:00   06:30:00

텍스트 및 duration형 값

duration 함수가 인식하는 형식의 시간 길이를 나타내는 텍스트가 있는 경우 이 텍스트를 duration형 배열과 비교할 수 있습니다. 비교 시 묵시적으로 텍스트가 변환됩니다.

예를 들어, t2를 2시간 5분을 나타내는 문자열과 비교해 보겠습니다. t2의 첫 번째 요소가 더 짧습니다.

tf = t2 >= "02:05:00"
tf = 1x4 logical array

   0   1   1   1

longerThan205 = t2(tf)
longerThan205 = 1x3 duration
   02:30:00   04:30:00   06:30:00

숫자와 duration형 배열

숫자형 배열을 duration형 배열과 비교할 수 있습니다. 비교 시 숫자형 값이 고정 길이(24시간)의 일수로 처리됩니다.

t2의 요소를 1일과 비교합니다. 모든 요소가 더 짧습니다.

tf = t2 < 1
tf = 1x4 logical array

   1   1   1   1

t2(tf)
ans = 1x4 duration
   00:30:00   02:30:00   04:30:00   06:30:00

t2의 요소를 1시간과 비교합니다. t2의 첫 번째 요소만 더 짧습니다.

tf = t2 < 1/24
tf = 1x4 logical array

   1   0   0   0

t2(tf)
ans = duration
   00:30:00

서로 다른 표준 시간대의 datetime형 배열 비교하기

로스앤젤레스의 2022년 10월 1일 오후 4시 및 뉴욕의 2022년 10월 1일 오후 5시에 대한 datetime형 값을 만듭니다. 두 도시는 표준 시간대가 서로 다릅니다.

TimeZone 이름-값 인수를 지정하여 표준 시간대가 있는 datetime형 배열을 만들 수 있습니다. 이러한 값을 표시할 때 표준 시간대를 표시하려면 Format 이름-값 인수를 지정합니다. datetime형 표시 형식을 입력 텍스트의 형식과 다르게 지정할 수 있습니다.

LAtime = datetime("2022-10-01 16:00:00", ...
                  "TimeZone","America/Los_Angeles",...
                  "Format","dd-MMM-yyyy hh:mm:ss a z")
LAtime = datetime
   01-Oct-2022 04:00:00 PM PDT

NYtime = datetime("2022-10-01 17:00:00", ...
                  "TimeZone","America/New_York",...
                  "Format","dd-MMM-yyyy hh:mm:ss a z")
NYtime = datetime
   01-Oct-2022 05:00:00 PM EDT

두 도시의 시간을 비교합니다. 같은 날 로스앤젤레스의 오후 4시는 뉴욕의 오후 5시보다 이후입니다. 표준 시간대를 지정하는 경우 datetime형 배열의 비교는 각 배열의 표준 시간대 정보를 고려합니다.

tf = NYtime < LAtime
tf = logical
   1

== 연산자를 사용하여 두 개의 datetime형 값을 동일한 시계 시간과 비교합니다. 이 두 값은 표준 시간대가 서로 다르기 때문에 서로 같지 않습니다.

NYtime4 = datetime("2022-10-01 16:00:00", ...
                  "TimeZone","America/New_York",...
                  "Format","dd-MMM-yyyy hh:mm:ss a z")
NYtime4 = datetime
   01-Oct-2022 04:00:00 PM EDT

tf = NYtime4 == LAtime
tf = logical
   0

표준 시간대를 갖는 datetime형 배열을 표준 시간대를 갖지 않는 datetime형 배열과 비교할 수 없습니다. 하나의 datetime형 배열만 표준 시간대를 갖는 경우 비교를 위한 정보가 충분하지 않습니다.

다른 함수를 사용하여 날짜/시간 비교하기

MATLAB은 날짜와 시간을 비교하는 다른 함수들을 제공합니다.

  • isbetweendatetime형 배열 또는 duration형 배열의 요소가 구간 내에 있는지 확인

  • isdstdatetime형 배열의 요소가 일광 절약 시간제에 속하는지 확인

  • isweekenddatetime형 배열의 요소가 주말(토요일과 일요일)에 해당하는지 확인

  • ismissing — 배열의 요소가 누락값(datetime형 배열의 경우 NaT, duration형 배열의 경우 NaN)인지 확인

datetime형 배열 또는 duration형 배열에 대해 집합 연산을 수행할 수도 있습니다.

  • union — 두 datetime형 배열 또는 두 duration형 배열의 합집합

  • intersect — 두 datetime형 배열 또는 두 duration형 배열의 교집합

  • ismember — 첫 번째 datetime형 또는 duration형 배열의 요소 중 두 번째 datetime형 또는 duration형 배열에도 있는 요소

  • setdiff — 두 datetime형 배열 또는 두 duration형 배열의 차집합

  • setxor — 두 datetime형 배열 또는 두 duration형 배열의 배타적 OR

예를 들어, datetime형 배열의 요소가 2022년 1분기에 해당하는지 확인합니다. (1분기의 끝은 2분기의 처음 시작과 같습니다.)

start1Q = datetime("2022-01-01");
end1Q = datetime("2022-04-01");
d = datetime(2022,2:4:10,15,12,0,0)
d = 1x3 datetime
   15-Feb-2022 12:00:00   15-Jun-2022 12:00:00   15-Oct-2022 12:00:00

1분기의 시작과 끝 사이에 d의 어떤 요소가 있는지 확인하려면 isbetween을 사용합니다. start1Qend1Q 사이의 시간 구간을 오른쪽이 열린 구간으로 지정합니다.

tf = isbetween(d,start1Q,end1Q,"openright")
tf = 1x3 logical array

   1   0   0

isbetween을 사용하고 오른쪽이 열린 구간을 지정하는 경우 이는 다음 표현식과 동일합니다. 이 구간은 2022년 1월 1일 시작부터 2022년 4월 1일 시작까지의 모든 시간을 포함하되, 4월 1일 시작 시점은 포함하지 않습니다. 어떤 기간의 끝을 지정하는 데 그다음 기간의 시작을 사용하는 경우에는 해당 기간을 오른쪽이 열린 구간으로 지정하는 방법을 사용해 보십시오.

tf = (start1Q <= d & d < end1Q)
tf = 1x3 logical array

   1   0   0

1분기에 해당하는 d의 요소를 표시합니다.

d(tf)
ans = datetime
   15-Feb-2022 12:00:00

TimeZone 속성을 설정하여 d의 표준 시간대를 지정합니다. 그런 다음 요소가 일광 절약 시간제에 속하는지 확인합니다.

d.TimeZone = "America/New_York";
isdst(d)
ans = 1x3 logical array

   0   1   1

요소가 주말에 해당하는지 확인합니다.

isweekend(d)
ans = 1x3 logical array

   0   0   1

일치하는 요소의 요일을 표시하려면 day 함수를 사용합니다.

weekendDays = d(isweekend(d))
weekendDays = datetime
   15-Oct-2022 12:00:00

day(weekendDays,"name")
ans = 1x1 cell array
    {'Saturday'}

참고 항목

| | | | | | |

관련 항목