Swift 에서 날짜/시간 비교, 계산하기 - Date, Calendar, dateComponents, date(byAdding:)

개발/iOS - Swift1 2025. 12. 5. 07:59

1. Date 타입끼리 직접 비교하기

Swift의 Date 타입은 내부적으로 시간 기준을 갖고 있기 때문에 단순 비교가 가능합니다.

let now = Date()
let after1Min = now.addingTimeInterval(60)

print(now < after1Min)   // true
print(now > after1Min)   // false
print(now == after1Min)  // false

이 비교는 "년/월/일"이 아니라, 정확한 초 단위의 시각 그대로 비교합니다.

 


 

2. 날짜가 같은 날인지 확인하기

UI에서 "오늘 작성된 글", "같은 날짜의 기록"처럼 날짜 단위 비교가 필요하다면 Calendar의 기능을 활용합니다.

let calendar = Calendar.current
let isSameDay = calendar.isDate(date1, inSameDayAs: date2)

시간이 달라도

2025-12-04 01:00:00

2025-12-04 22:00:00

이 둘은 같은 날로 처리됩니다.

 


3. 오늘, 어제, 내일인지 판별하기

이건 Swift가 기본으로 제공하는 편리한 메서드가 있습니다.

let calendar = Calendar.current

if calendar.isDateInToday(someDate) {
    print("오늘 날짜입니다.")
}

if calendar.isDateInYesterday(someDate) {
    print("어제 날짜입니다.")
}

if calendar.isDateInTomorrow(someDate) {
    print("내일 날짜입니다.")
}

앱에서 게시물 날짜 라벨 표현할 때 자주 쓰는 패턴입니다.

 


 

4. 두 날짜의 차이 계산하기 (일, 시간, 분)

 

일(day) 단위 차이

let calendar = Calendar.current
let diff = calendar.dateComponents([.day], from: startDate, to: endDate)
print(diff.day ?? 0)

 

여러 단위를 한 번에 계산하기

let comp = calendar.dateComponents([.day, .hour, .minute], from: startDate, to: endDate)

print(comp.day)
print(comp.hour)
print(comp.minute)

원하는 단위만 넣어서 계산할 수 있으니 범용성이 높습니다.

 


5. 초 단위 차이 계산하기

날짜 객체끼리 직접 시간 간격을 계산하는 방법도 있습니다.

let seconds = endDate.timeIntervalSince(startDate)
print(seconds)

 

  • 양수 → endDate가 더 미래
  • 음수 → endDate가 과거
  • 결과는 Double(초 단위)

 

간단한 시간 계산이라면 가장 빠른 접근입니다.

 


 

6. 날짜에 값 더하기·빼기 (일/월/시간/분 단위)

 

하루 더하기

let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: Date())

7일 더하기

Calendar.current.date(byAdding: .day, value: 7, to: Date())

 

3시간 빼기

Calendar.current.date(byAdding: .hour, value: -3, to: Date())

 

두 달 더하기

Calendar.current.date(byAdding: .month, value: 2, to: Date())

 

1년 더하기

Calendar.current.date(byAdding: .year, value: 1, to: Date())

addingTimeInterval도 가능하지만 day/month/year 단위는 Calendar로 계산하는 것이 훨씬 정확합니다.

 


7. 날짜의 시작(자정) 구하기

날짜 비교의 기준을 "00시 00분 00초"로 맞추고 싶을 때 사용합니다.

let calendar = Calendar.current
let comps = calendar.dateComponents([.year, .month, .day], from: Date())
let startOfDay = calendar.date(from: comps)

날짜끼리 비교할 때 기준을 명확하게 잡는 데 유용합니다.

 


 

8. 이번 달의 첫 날, 마지막 날 구하기

 

이번 달 첫 날

let calendar = Calendar.current
let now = Date()
let comps = calendar.dateComponents([.year, .month], from: now)
let firstDay = calendar.date(from: comps)

 

이번 달 마지막 날

if let firstDay = firstDay {
    let lastDay = calendar.date(byAdding: DateComponents(month: 1, day: -1), to: firstDay)
}

달력을 만들거나 월간 통계를 처리할 때 자주 필요한 계산입니다.

 


반응형

9. 특정 단위로 날짜 비교하기 (연/월/일/시)

Calendar에는 특정 단위까지만 비교하는 기능도 있습니다.

let calendar = Calendar.current
let sameHour = calendar.isDate(date1, equalTo: date2, toGranularity: .hour)

 

기준이 되는 granularity는 다음 중 선택할 수 있습니다.

단위 의미
.year 같은 연도인지
.month 같은 월인지
.day 같은 날짜인지
.hour 같은 시간인지
.minute 같은 분인지

 


 

10. 날짜가 특정 범위 안에 들어가는지 확인하기

Swift의 Range 기능을 이용한 방식입니다.

let now = Date()
let range = startDate ... endDate

if range.contains(now) {
    print("범위 안에 포함됩니다.")
}

 

반응형
admin