From 2f8331f2ff07e82769a31eb08b4d6bf6fa69b3a6 Mon Sep 17 00:00:00 2001 From: Yu Sung Date: Mon, 5 Jan 2026 11:36:26 +0900 Subject: [PATCH] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EC=8B=9C?= =?UTF-8?q?=EC=9E=91=EC=8B=9C=EA=B0=84=20UTC=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 라이브 상세와 수정 화면에서 UTC 기준 시간을 표시한다. 날짜 표기는 OS 언어 설정의 기본 포맷을 사용한다. --- .../Sources/Extensions/DateExtension.swift | 10 ++++++++++ .../Sources/Extensions/StringExtension.swift | 8 ++++++++ .../Room/Detail/GetRoomDetailResponse.swift | 1 + .../Live/Room/Detail/LiveDetailView.swift | 3 ++- .../Room/Edit/LiveRoomEditViewModel.swift | 19 +++++++++++++------ 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/SodaLive/Sources/Extensions/DateExtension.swift b/SodaLive/Sources/Extensions/DateExtension.swift index daa26c0..613c37c 100644 --- a/SodaLive/Sources/Extensions/DateExtension.swift +++ b/SodaLive/Sources/Extensions/DateExtension.swift @@ -15,6 +15,16 @@ extension Date { return formatter.string(from: self) } + func localizedDateTimeString(dateStyle: DateFormatter.Style = .medium, + timeStyle: DateFormatter.Style = .short) -> String { + let formatter = DateFormatter() + formatter.dateStyle = dateStyle + formatter.timeStyle = timeStyle + formatter.locale = Locale.autoupdatingCurrent + formatter.timeZone = TimeZone.current + return formatter.string(from: self) + } + func currentTimeMillis() -> Int64 { return Int64(self.timeIntervalSince1970 * 1000) } diff --git a/SodaLive/Sources/Extensions/StringExtension.swift b/SodaLive/Sources/Extensions/StringExtension.swift index b1229f4..dc5773a 100644 --- a/SodaLive/Sources/Extensions/StringExtension.swift +++ b/SodaLive/Sources/Extensions/StringExtension.swift @@ -95,4 +95,12 @@ extension String { "time": time ] } + + func parseUtcIsoDate() -> Date? { + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss" + formatter.locale = Locale(identifier: "en_US_POSIX") + formatter.timeZone = TimeZone(secondsFromGMT: 0) + return formatter.date(from: self) + } } diff --git a/SodaLive/Sources/Live/Room/Detail/GetRoomDetailResponse.swift b/SodaLive/Sources/Live/Room/Detail/GetRoomDetailResponse.swift index 72ec5c1..fc8889e 100644 --- a/SodaLive/Sources/Live/Room/Detail/GetRoomDetailResponse.swift +++ b/SodaLive/Sources/Live/Room/Detail/GetRoomDetailResponse.swift @@ -19,6 +19,7 @@ struct GetRoomDetailResponse: Decodable { let tags: [String] let channelName: String? let beginDateTime: String + let beginDateTimeUtc: String let numberOfParticipants: Int let numberOfParticipantsTotal: Int let manager: GetRoomDetailManager diff --git a/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift b/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift index 6d0fd63..56a97c4 100644 --- a/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift +++ b/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift @@ -94,7 +94,8 @@ struct LiveDetailView: View { .padding(.top, 6.7) HStack(spacing: 0) { - Text(room.beginDateTime.convertDateFormat(from: "yyyy.MM.dd EEE hh:mm a", to: "yyyy년 MM월 dd일 (E) a hh시 mm분", locale: Locale(identifier: "en_US_POSIX"))) + let beginDateText = room.beginDateTimeUtc.parseUtcIsoDate()?.localizedDateTimeString() ?? room.beginDateTime + Text(beginDateText) .font(.custom(Font.medium.rawValue, size: 12)) .foregroundColor(Color(hex: "bbbbbb")) diff --git a/SodaLive/Sources/Live/Room/Edit/LiveRoomEditViewModel.swift b/SodaLive/Sources/Live/Room/Edit/LiveRoomEditViewModel.swift index f92f7ff..7c823ed 100644 --- a/SodaLive/Sources/Live/Room/Edit/LiveRoomEditViewModel.swift +++ b/SodaLive/Sources/Live/Room/Edit/LiveRoomEditViewModel.swift @@ -52,12 +52,19 @@ final class LiveRoomEditViewModel: ObservableObject { notice = room!.notice numberOfPeople = String(room!.numberOfParticipantsTotal) - let fromFormatter = DateFormatter() - fromFormatter.dateFormat = "yyyy.MM.dd EEE hh:mm a" - fromFormatter.locale = Locale(identifier: "en_US_POSIX") - - reservationDate = fromFormatter.date(from: room!.beginDateTime)! - reservationTime = fromFormatter.date(from: room!.beginDateTime)! + if let beginDate = room!.beginDateTimeUtc.parseUtcIsoDate() { + reservationDate = beginDate + reservationTime = beginDate + } else { + let fromFormatter = DateFormatter() + fromFormatter.dateFormat = "yyyy.MM.dd EEE hh:mm a" + fromFormatter.locale = Locale(identifier: "en_US_POSIX") + + if let legacyDate = fromFormatter.date(from: room!.beginDateTime) { + reservationDate = legacyDate + reservationTime = legacyDate + } + } let beginDate = reservationDate.convertDateFormat(dateFormat: "yyyy-MM-dd") let beginTime = reservationTime.convertDateFormat(dateFormat: "HH:mm")