티스토리 뷰

안녕하세요.

가만 생각해보니 Date 타입은 생각보다 많이 쓰는데 

Date 가 무엇인지 그리고 어떻게 사용하는지는 정리를 안했더라고요.

( Date <-> String 전환하는 것만 올렸더라고요;;)

2022.10.14 - [iOS개발/Swift 기본] - Swift Date <-> String 타입 변경하기

 

 

그래서 오늘은 알아두면 쓸모있는 Date 에 대해 간단히 알아보고자 합니다. 

 

* Date 타입 이란? 

- 시간을 표현하는 타입입니다. 

- NSDate 타입은 Date 타입을 좀더 용이하게 사용하기 위해 제작된 타입입니다.

- 그래서 NSDateDate 간의 전환이 간단합니다. 

NSDate() as Date // NSDate -> Date
Date() as NSDate // Date -> NSDate

- Formatter 를 통해 String 타입과도 전환이 가능합니다. 

- 이때 Formatter 형식은 String 의 형태로 지정하게 됩니다. 

func changeToString(day : Date) -> String?{ // Date -> String
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd HH:mm:SS a" // 년도-달-일 시:분:초 오전/오후
    return formatter.string(from: day)
}
func changeToDate(day : String) -> Date?{ // String -> Date
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"
    return formatter.date(from: day)
}

# 실제 실행시

print(changeToDate(day: "2020-02-02"))
print(changeToString(day: Date()))

결과 값

* Date 타입 주의 사항

- 기본적으로 보이는 시간은 UTC 를 기준으로 합니다. 

- UTC : 협정시계시(국제 표준 시간), 우리나라와 9시간 차이가 납니다. (우리나라가 더 빠릅니다.)

- 그래서 단순 Print 를 해서 값을 볼 경우 UTC 시간으로 보입니다.

- 하지만 Formatter로 바꾸어 String으로 표기하면 설정 국가를 따라 국가에 맞는 시간이 보이게 됩니다.

 

* Date 타입 출력 국가 언어 변경

- 아까 언급된 Formatter 를 통해 국가를 변경할수있습니다. 

func changeToString(day : Date) -> String?{
    let formatter = DateFormatter()
	//아래 줄이 국가를 변경하는 코드입니다.
    formatter.locale = Locale(identifier: "ko_KR") //en_US /fr_FR/ja_JP
    formatter.dateFormat = "yyyy-MM-dd HH:mm:SS a"
    return formatter.string(from: day)
}

- 편한 출력을 위해 조금 변경해볼께요. 

- 참고로 Local 이 영향을 주는건 출력시 언어입니다. (시간 X)

func changeToString(day : Date,country : String) -> String?{
    let formatter = DateFormatter()
    formatter.locale = Locale(identifier: country)
    formatter.dateFormat = "yyyy-MM-dd HH:mm:SS a"
    return formatter.string(from: day)
}

# 실제 실행시

print(changeToString(day: Date(), country: "ko_KR"))
print(changeToString(day: Date(), country: "en_US"))
print(changeToString(day: Date(), country: "fr_FR"))
print(changeToString(day: Date(), country: "ja_JP"))

 

* Date 국가 시간 변경 

- 그럼 출력되는 시간을 바꾸려면 어떻게 해야할까요?

- local 이 아닌 timeZone 을 수정해주시면 됩니다. 

formatter.timeZone = TimeZone(identifier: "America/Los_Angeles")//"Australia/Perth"

참고로 지금 오후 9시입니다.

 

* Date 타입 덧셈 / 뺄셈

- 사실상 덧셈 뺄셈은 여기서 양수와 음수의 차이입니다. 

  let date = Calendar.current.date(byAdding: 계산 단위,value: 추가할 값, to: 기준 날짜)

- 예를 들면 아래처럼 이용가능합니다. (당연히 뺄셈은 -로 해주면 가능합니다.)

let customDay = Calendar.current.date(byAdding: .day,value: 5, to: Date()) 
// 오늘 날짜 기준 (Date()) 5(value)일(day)를 더해주세요.
print(customDay)

오늘은 9월13일입니다.

* Date 타입 Double 전환

- 가끔 서버와 통신하다보면 서버쪽에서 시간좀 보내달라고 하실때가 있습니다. 

- 물론 이때 String 으로 요구하시는 분들이 있으시지만 간혹 Double을 요구하시는 분들이 계십니다. 

- 이 경우에는 아래처럼 하는 방법이 있습니다. 

- 참고로 해당 숫자는 1970년도와 지정된 날짜 사이의 시간을 표현하는 겁니다.

Date().timeIntervalSince1970

 

아무래도 Date 타입은 Formatter 와 같이 쓰다보니 

Formatter 에 관한 내용이 많이 들어갔네요.

 

DateFormatter 에 대해 좀더 자세히 알고싶으신 분들은 아래 사이트를 추천드립니다.

https://developer.apple.com/documentation/foundation/dateformatter

 

DateFormatter | Apple Developer Documentation

A formatter that converts between dates and their textual representations.

developer.apple.com

 

그럼 오늘도 파이팅입니다.

댓글