한국 기준의 시간정보로 변환TimeZone, DateFormatter()

임혜정·2024년 8월 17일
0
post-custom-banner

상황. 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"과 같은 식별자로 특정 지역의 시간대를 정확하게 지정해준다

profile
오늘 배운걸 까먹었을 미래의 나에게..⭐️
post-custom-banner

0개의 댓글