본문 바로가기
Xcode/Swift - PlayGround

PlayGround) DateFormatter를 이용해서 날짜를 변경하자

by 후르륵짭짭 2020. 12. 18.
728x90
반응형

 

안녕하세요 ㅎㅎㅎ 후르륵짭짭 입니다.

이번에는 DateFormatter에 대해서 배워보려고 합니다.

앱 개발을 할때, 굉장히 많이 사용하게 되는데요!

그럼 지금 알아보도록 하겠습니다.

 

** 현재시간을 원하는 타입으로 만드는 방법 **

DateFormatter에 대해서 알아보도록 하겠습니다.

내용을 보면 DateFormatter는 Date와 text를 서로 바꿔주는 포멧이라 되어 있습니다.

그럼 지금 알아보도록 하겠습니다.

 

 - 현재 시간을 특정 형태로 변형하기 

func DateType2String() -> String{
    let current = Date()
    
    let formatter = DateFormatter()
    //한국 시간으로 표시
    formatter.locale = Locale(identifier: "ko_kr")
    formatter.timeZone = TimeZone(abbreviation: "KST")
    //형태 변환
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    
    return formatter.string(from: current)
}

//결과
"2020-12-18 15:11:26"

일단 Date() 객체를 생성하면 현재 년도와 월 , 일 시간 ,분 초가 나오게 됩니다.

그리고 DateFormater() 객체를 생성해주고,

Local과 TimeZone을 위와 같이 해주면 한국 시간으로 나오게 됩니다.

여기서 중요한 부분은 dateFormat인데, String 형태로 원하는 형식으로 넣어주면 그렇게 결과가 나오게 됩니다!

그리고 위와 같이 정말 다양한 형태로 만들 수 있습니다.

(참고로 HH -> 13시 이렇게 24시 형태로 나오고 hh -> 1시 이렇게 12시 형태로 나옵니다 )

 

 

 - String을 Date 타입으로 변경하는 방법

func String2DateType(string : String) -> Date?{
    let formatter = DateFormatter()
    
    formatter.dateFormat = "yyyy-MM-dd"
    
    return formatter.date(from: string)
}

String2DateType(string: "2020-01-02")

//결과
"Jan 2, 2020 at 12:00 AM"

만약 특정 String 타입을 Date 타입으로 변경하고 싶다면

formatter가 입력으로 들어오는 String과 형식이 같아야합니다.

그리고 위와 같이 해주면 Date 형식으로 나오고 만약 이것을 다시 원하는 형식으로 가공 하고 싶다면

1번에서 했던것을 그대로 해주면 됩니다.

 

 - 시간을 추가 하는 방법 

func oneHourPlus() -> String{
    
    let now = Date()
    let oneHourLater = now.addingTimeInterval(+3600)
    //TimeInterval은 초를 의미한다.
    //60 - 1분
    //3600 - 1시간
    //86400 - 24시간 하루
    let formatter = DateFormatter()
    
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
    
    print("현재시간 : \(formatter.string(from: now))")
    
    return formatter.string(from: oneHourLater)
}

print(oneHourPlus())

//결과
현재시간 : 2020-12-18 15:11:26
2020-12-18 16:11:26

만약 특정 시간을 기존 시간에 더하고 싶을 경우에는 TimeInterval로 더해주면 됩니다.

TimeInterval은 A number of seconds로 되어 있는 거 처럼 초 단위를 의미합니다.

따라서 위에 now라는 Date에 60*60을 해서 한시간인 3600 초를 더해줬습니다.

 

 - DateFormatter에 오전 오후를 붙이는 방법

func makeAMPM() -> String{
    
    let now = Date()
    
    let formatter = DateFormatter()
    //한국 시간으로 표시
    formatter.locale = Locale(identifier: "ko_kr")
    formatter.timeZone = TimeZone(abbreviation: "KST")
    //형태 변환
    formatter.dateFormat = "a hh:mm:ss"
    formatter.amSymbol = "오전"
    formatter.pmSymbol = "오후"
    
    return formatter.string(from: now)
    
}

//결과
"오후 03:11:26"

방법은 간단합니다. 

DateFormatter().dateFormat에 원하는 부분에 "a"를 넣어주고

amSymbol 과 pmSymbol에 원하는 스타일을 넣어주면 됩니다.

 

** Calendar를 사용하는 방법 **

 지금 까지 DateFormatter에 대해 알아봤으니, 이제는 Calendar에 대해서 알아보도록 하겠습니다.

Calendar는 date의 비교와 계산의 특징을 제공하는 시간의 절대적인 시점과 달력의 단위 사이의 관계에 대한 정의라고 되어있습니다.

그래서 이 Calendar와 DateFormatter를 사용하면 더 큰 시너지 효과를 만들어 낼 수 있습니다.

func useCalendar(){
    
    let date = Date()
    let calendar = Calendar.current
    
    let component = calendar.dateComponents([.hour, .minute, .second], from: date)
    
    print(component)
    
}

//결과
hour: 15 minute: 11 second: 26 isLeapMonth: false 

Calendar.current는 현재 그리고렉? 어쨋든 그런 시간의 달력을 사용한다는 것을 의미합니다.

그리고 dateComponents는 시간 달력을 어떻게 구성할 것인가를 의미합니다.

위와 같이 하면 우리가 원하는 데로 hour , minute , second 이렇게 나오게 됩니다.

 

 - Calendar를 이용해서 시간 더하기 

func oneHourAfterUseCalendar(){
    
    let date = Date()
    let calendar = Calendar.current
    
    let componet = calendar.date(byAdding: .hour, value: +1, to: date)
    
    print(String(describing: componet))
}

//결과
Optional(2020-12-18 07:11:26 +0000)

위와 거의 비슷한데, 위에서는 TimeInterval를 이용해서 시간을 더해줬습니다.

하지만 위와 같이 하면 date(byAdding : 더하는 단위 , value : 더할 값, to : 더할 곳)

이렇게 구성해주면 Date() 타입으로 반환이 됩니다.

그럼 결과가 위와 같이 Date 형식으로 나오게 됩니다.

 

 - 날짜와 날짜를 계산하는 방법 

func getDiffTwoDays(){
    
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let startDate = dateFormatter.date(from:"2018-03-01")
    let endDate = dateFormatter.date(from:"2018-05-15")
    
    let calendar = Calendar.current
    let dateGap = calendar.dateComponents([.year,.month,.day,.hour], from: startDate!, to: endDate!)
    
//    if case let (y?, m? , d?, h?) = (dateGap.year , dateGap.month, dateGap.day, dateGap.hour) {
//        print("\(y)년 \(m)개월 \(d)일 \(h)시간 후")
//    }
    
    let test = calendar.date(from: dateGap)!
    print(test)
    
}

//결과
0000-02-13 15:32:08 +0000

만약에 어떤 특정 시간과 특정 시간 끼리의 계산을 하고 싶은 경우에 

Calender를 이용하면 더욱 쉽게 사용 할 수 있습니다.

그리고 결과로 나온 DateComponents 객체를 date에 넣어주면 Date 타입으로 나오게 되고

그것을 다시 Date -> String으로 해준다면 

우리가 원하는 결과를 얻을 수 있게 됩니다.

 

참고 사이트 :

한국 시간으로 날짜를 변경하는 방법 :

macinjune.com/all-posts/web-developing/swift/xcode-swift-날짜와-시간-다루기-date-datecomponents/

 

[Xcode / Swift] 날짜와 시간 다루기 | Date() DateComponents() - Mac In June

현재 시점의 날짜와 시간 구하기 Swift 개발 문서에 따르면, Date는 어떠한 달력과 Time Zone과는 독립적인 특정 시점의 시간 포인트이다. Date Class를 생성함으로 인해서 우리가 바로 구할 수 있는 값

macinjune.com

 

한시간 전 시간을 계산하는 방법 : 

stackoverflow.com/a/27251872/13065642

 

How to get 1 hour ago from a date in iOS swift?

I have been researching, but I couldnt find exact solution for my problem. I have been trying to get 1 hour ago from a date. How can I achieve this in swift?

stackoverflow.com

 

PM 또는 AM을 넣어서 출력하는 방법 : 

stackoverflow.com/a/31469237/13065642

 

Show AM/PM in capitals in swift

I wrote the following code to show a datetime in a particular format: let formatter = NSDateFormatter() formatter.dateStyle = NSDateFormatterStyle.LongStyle formatter.timeStyle = .MediumStyle form...

stackoverflow.com

 

UILabel 폰트 크기 코드로 작용시키는 방법 : 

calmone.tistory.com/entry/iOS-UIKit-in-Swift-4-텍스트에-폰트-적용하기-Display-characters-with-UIFont

 

[iOS UIKit in Swift 4] 텍스트에 폰트 적용하기 (Display characters with UIFont)

텍스트에 폰트 적용하기 텍스트에 여러가지 종류의 폰트크기, italic, bold와 iOS 에서 제공하는 폰트를 사용해 봤습니다. iOS가 제공하는 폰트들은 해당 링크에서 확인할 수 있습니다. 링크 : http://

calmone.tistory.com

 

728x90
반응형

댓글