개발 창고/iOS

[SwiftUI] Formatter를 이용하여 Date 타입 처리하는 방법

로이제로 2023. 8. 3. 22:00
반응형

방법 #1. formatter 사용

방법 #1. formatter 사용

  1. 오늘 날짜를 today 변수로 생성
  2. dateformat01이라는 변수에 date의 fomat을 선언
  3. 선언된 dateformat01을 today를 문자열로 변환하는 formatter로 사용

방법 #2. function 사용

방법 #2. function 사용

  1. 오늘 날짜를 today 변수로 생성
  2. dateformat02라는 함수 생성
    • pDate가 입력될 날짜
    • withFormat 날짜 포맷
  3. dateformat02 함수를 이용하여 today값을 문자열로 변환

DateFormat 유형

아래 예시는 "2023년 7월 14일 금요일 오후 3시 5분 7초 123밀리초" 기준 예시입니다.

Format 내용 예시
yy 연도 마지막 두자리만 표기 2023 ▶︎ "23"
yyyy 연도 전체 표기 2023 ▶︎ "2023"
M 월 (숫자) 7 ▶︎ "7"
MM 월 (숫자 2자리 고정) 7 ▶︎ "07"
MMM 월 표기 (약식 문자) [default]
7 ▶︎ "Jul"

[Locale = ko_KR]
7 ▶︎ "7월"
MMMM 월 표기 (전체 문자) [default]
7 ▶︎ "July"

[Locale = ko_KR]
7 ▶︎ "7월"
d 일 (숫자) 14 ▶︎ "14"

[7일인 경우]
7 ▶︎ "7"
dd 일 (숫자 2자리 고정) 14 ▶︎ "14"

[7일인 경우]
7 ▶︎ "07"
E, EE, EEE 요일 (약식) [default]
Friday ▶︎ "Fri"

[Locale = ko_KR]
Friday ▶︎ "금"
EEEE 요일 (전체) [default]
Friday ▶︎ "Friday"

[Locale = ko_KR]
Friday ▶︎ "금요일"
EEEEE 요일 (한 글자) [default]
Friday ▶︎ "F"

[Locale = ko_KR]
Friday ▶︎ "금"
EEEEEE 요일
영문은 두 글자
한글 기준은 한 글자
[default]
Friday ▶︎ "Fr"

[Locale = ko_KR]
Friday ▶︎ "금"
a 오전 / 오후 [default]
AM ▶︎ "AM"

[Locale = ko_KR]
AM ▶︎ "오전"
h 시간 (12시간 기준) 오후 3시 ▶︎ "3"
hh 시간 (12시간 기준, 2자리) 오후 3시 ▶︎ "03"
H 시간 (24시간 기준) 오후 3시 ▶︎ "15"

[오전 3시인 경우]
오전 3시 ▶︎ "3"
HH 시간(24시간 기준, 2자리) 오후 3시 ▶︎ "15"

[오전 3시인 경우]
오전 3시 ▶︎ "03"
m 5분 ▶︎ "5"
mm 분 (2자리) 5분 ▶︎ "05"
s 7초 ▶︎ "7"
ss 초 (2자리) 7초 ▶︎ "07"
S 밀리초 (ms) 123ms ▶︎ "0.1"
SS 밀리초 (ms, 2자리) 123ms ▶︎ "0.12"
SSS 밀리초 (ms, 3자리) 123ms ▶︎ "0.123"

전체 테스트 소스

import SwiftUI

// View 페이지
struct TestView: View {
    private var today = Date()
    
    // 방법 #1
    let dateformat01: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
        return formatter
    }()

    // 방법 #2
    func dateformat02(pDate: Date, withFormat format: String) -> String {
        let fmt = DateFormatter()
        fmt.dateFormat  = format
        fmt.locale      = Locale(identifier: "ko_KR")   // 날짜포맷 현지화

        return fmt.string(from:pDate)
    }
    

    var body: some View {
        VStack {
            List {
                Text("\(today, formatter:dateformat01)")
                
                Text(dateformat02(pDate: today, withFormat: "yyyy-MM-dd HH:mm:ss"))
                
                Text(dateformat02(pDate: today, withFormat: "yyyy-MM-dd"))
                
                Text(dateformat02(pDate: today, withFormat: "yyyy-MM-dd E"))
                
                Text(dateformat02(pDate: today, withFormat: "yyyy-MM-dd EEEE"))
                
                Text(dateformat02(pDate: today, withFormat: "a hh:mm:ss.SSS"))
            }
        }
    }
}

// View 미리보기
struct TestView_Previews: PreviewProvider {
    static var previews: some View {
        TestView()
    }
}
반응형