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")