상황. API로 데이터를 내려받는 사이트가 해외인데, 한국 기준의 시간을 제공해야할 때 and 표시되는 데이터 포멧의 가독성이 좋지않아 변환해줘야하는 경우
solution:
Foundation 프레임워크에서 제공하는 TimeZone구조체를 이용해서 해결가능.
Timezone은 특정 지리적 지역의 시간대 정보를 캡슐화하고 날짜와 시간 계산에 쓰임
특정 지역의 GMT/UTC로부터 오프셋 제공, 서머타임 정보 DST 포함
시간대 전환 정보를 관리
// ForecastWeather 객체와 Boolean 플래그를 파라미터로 받는 configure 메소드 정의
func configure(with forecast: ForecastWeather, isToday: Bool) {
// DateFormatter 인스턴스 초기화 - Foundation 프레임워크의 클래스
let dateFormatter = DateFormatter()
// dateFormatter의 dateFormat을 ISO 8601 형식으로 설정
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
// TimeZone 설정 - Foundation 프레임워크의 구조체
// identifier로 IANA 시간대 데이터베이스의 식별자를 사용
dateFormatter.timeZone = TimeZone(identifier: "Asia/Seoul")
// Locale 설정 - Foundation 프레임워크의 구조체
// identifier로 IETF BCP 47 언어 태그 문자열 사용
dateFormatter.locale = Locale(identifier: "ko_KR")
// forecast.dtTxt를 Date 객체로 파싱
if let forecastDate = dateFormatter.date(from: forecast.dtTxt) {
// isToday 플래그에 따라 조건부 렌더링
if isToday {
dayLabel.text = "오늘"
} else {
// dateFormat을 전체 요일 이름으로 변경
dateFormatter.dateFormat = "EEEE"
// 파싱된 Date 객체를 요일 문자열로 변환하여 할당
dayLabel.text = dateFormatter.string(from: forecastDate)
}
}
// forecast.main.temp를 정수로 캐스팅하고 온도 단위를 추가하여 문자열 보간
tempLabel.text = "\(Int(forecast.main.temp))°C"
// TODO: 날씨 아이콘 설정 로직 구현
// 고려사항: 네트워크 요청 최소화를 위한 이미지 캐싱 전략 수립
}
TimeZone(identifier:)
생성자는 IANA 시간대 데이터베이스의 식별자를 사용하여 TimeZone 인스턴스를 생성하고
"Asia/Seoul"과 같은 식별자로 특정 지역의 시간대를 정확하게 지정해준다