티스토리 뷰
안녕하세요.
가만 생각해보니 Date 타입은 생각보다 많이 쓰는데
Date 가 무엇인지 그리고 어떻게 사용하는지는 정리를 안했더라고요.
( Date <-> String 전환하는 것만 올렸더라고요;;)
2022.10.14 - [iOS개발/Swift 기본] - Swift Date <-> String 타입 변경하기
그래서 오늘은 알아두면 쓸모있는 Date 에 대해 간단히 알아보고자 합니다.
* Date 타입 이란?
- 시간을 표현하는 타입입니다.
- NSDate 타입은 Date 타입을 좀더 용이하게 사용하기 위해 제작된 타입입니다.
- 그래서 NSDate 와 Date 간의 전환이 간단합니다.
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"
* 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)
* Date 타입 Double 전환
- 가끔 서버와 통신하다보면 서버쪽에서 시간좀 보내달라고 하실때가 있습니다.
- 물론 이때 String 으로 요구하시는 분들이 있으시지만 간혹 Double을 요구하시는 분들이 계십니다.
- 이 경우에는 아래처럼 하는 방법이 있습니다.
- 참고로 해당 숫자는 1970년도와 지정된 날짜 사이의 시간을 표현하는 겁니다.
Date().timeIntervalSince1970
아무래도 Date 타입은 Formatter 와 같이 쓰다보니
Formatter 에 관한 내용이 많이 들어갔네요.
DateFormatter 에 대해 좀더 자세히 알고싶으신 분들은 아래 사이트를 추천드립니다.
https://developer.apple.com/documentation/foundation/dateformatter
그럼 오늘도 파이팅입니다.
'iOS개발 > Swift 기본' 카테고리의 다른 글
Swift Shadow(그림자) 설정 알아보기 (0) | 2024.02.27 |
---|---|
UICollectionView reloadData 이후 이벤트 처리 (0) | 2023.09.18 |
swift UICollectionView 사이즈 지정시 주의 사항 (0) | 2023.09.08 |
Swift 스크롤 뷰 페이저 (회전 뷰) 만들기 (Carousel View) (0) | 2023.09.05 |
swift 한글 받침 확인 하는 방법 (0) | 2023.08.03 |