Swift 날짜 연관성 요약

8494 단어 Swifttech
최근 제작된 앱 중에는 날짜에 대한 조작이 많았는데 스위프트데이트를 넣으려고 시도해보니 잘 안 되더라고요...
조사를 많이 했기 때문에 잊을 때 남기 위해서.

Calendar, Locale, TimeZone, DateFormatter


각자의 역할에 관하여
  • Calendar
    절대 시간 관리, 날짜 계산, 비교 등
    달력에 따라 윤년과 여름철을 고려해 계산할 수 있다
  • Locale
    언어 및 영역이 결합된 로켈 정보 저장
    identifier를 보면 현재 언어를 확인할 수 있습니다
  • TimeZone
    시간대 정보 유지
    GMT(그리니치표준시)와의 시차로 표시
    일본 표준시(JST)는 GMT+9시간
  • 으로 정의
  • DateFormatter
    날짜 및 시간 형식 정의
    데이터로 텍스트 변환
  • Calendar


  • Calendar.current를 사용하면 달력이 로컬 환경에 따라 달라지기 때문에 서력으로 지정하고자 하는 경우.gregorian으로 지정
  • .japanese(화력)
  • .gregorin(서력)
  • 오늘, 어제, 내일, 주말 조사

  • 진짜/가짜로 돌아가기
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let yesterday = date.addingTimeInterval(-60 * 60 * 24)
    let tommorow = date.addingTimeInterval(60 * 60 * 24)
    
    print(calendar.isDateInToday(date)) // 今日かどうか
    print(calendar.isDateInYesterday(yesterday)) // 昨日かどうか
    print(calendar.isDateInTomorrow(tommorow)) // 明日かどうか
    print(calendar.isDateInWeekend(date)) // 週末かどうか
    

    새 날짜 생성(시간)

  • 생성일
  • let calendar = Calendar(identifier: .gregorian)
    let date = calendar.date(from: DateComponents(year: 2021, month: 3, day: 1))
    
  • 생성 시간
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let new = calendar.date(bySettingHour: 10, minute: 0, second: 0, of: date)
    

    분, 초 따위는 버리다

  • 분 이하 반올림
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let compornent = calendar.dateComponents([.year, .month, .day, .hour], from: date)
    let new = calendar.date(from: compornent)
    
  • 초 이하의 반올림
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let compornent = calendar.dateComponents([.year, .month, .day, .hour, .minute], from: date)
    let new = calendar.date(from: compornent)
    

    수령 날짜(시간)

  • 취득년
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let year = calendar.component(.year, from: date) // 2021 
    
    let calendar = Calendar(identifier: .japanese)
    let date = Date()
    let year = calendar.component(.year, from: date) // 3 
    
  • 수령 월
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let month = calendar.component(.month, from: date) // 3 
    
  • 수령 날짜
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let day = calendar.component(.day, from: date) // 1
    
  • 수령 시간
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let hour = calendar.component(.hour, from: date) // 10
    
    획득
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let minute = calendar.component(.minute, from: date) // 10
    
  • 획득 초
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let second = calendar.component(.second, from: date) // 10
    

    당일 0시 0점 획득.

  • 날짜만 비교할 때 시간 등을 조정하기 위해
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    calendar.startOfDay(for: date)
    

    날짜 차이 가져오기

  • 며칠 등 경과일수를 얻고 싶을 때
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let date2 = calendar.date(from: DateComponents(year: 2021, month: 3, day: 10)) 
    calendar.dateComponents([.day], from: date, to: date2!).day // 9
    
  • 단, 위와 같은 경우에도 반드시 시간을 고려해야 하며, 1시간 미만일 경우 등 경과일수를 정확하게 취득할 수 없다.시간을 조정하면 정확한 일수를 얻을 수 있다.
  • let calendar = Calendar(identifier: .gregorian)
    let date = calendar.startOfDay(for: Date())
    var date2 = calendar.date(from: DateComponents(year: 2021, month: 3, day: 10))
    date2 = calendar.startOfDay(for: date2!)
    calendar.dateComponents([.day], from: date, to: date2!).day // 9
    

    날짜 상가/감법

  • 날짜 합계(1일)
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let modifiedDate = calendar.date(byAdding: .day, value: 1, to: date)!
    
  • 일자감법(1일 전)
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let modifiedDate = calendar.date(byAdding: .day, value: -1, to: date)!
    

    시간을 계산하다

  • 시간의 덧셈(1시간 후)
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let modifiedDate = calendar.date(byAdding: .hour, value: 1, to: date)!
    
  • 시간의 감법(1시간 전)
  • let calendar = Calendar(identifier: .gregorian)
    let date = Date()
    let modifiedDate = calendar.date(byAdding: .hour, value: -1, to: date)!
    
  • .데이 하우스.홀을 열다.year/.minute/.second로 변경하여 적용 가능
  • Locale


    Locale 식별자는 언어(Language)와 지역(Region)을 결합한 String 문자열입니다.
    언어와 지역은 기본 형식입니다. 예를 들어 일본어+일본지역의 경우 ja입니다.JP
  • 현재 Locale 정보 얻기
  • let locale = Locale.current
    let identifier = locale.identifier
    
  • Locale 패브릭 생성
  • let locale = Locale(identifier: "ja_JP") 
    

    Xcode에서 응용 프로그램의 현지화 언어 변경


    Xcode의 Targets → info에서 빨간 테두리를 Japan으로 바꿉니다

    TimeZone


    iOS에서 사용하는 터미널의 위치 정보에 따라 시간대를 설정합니다
    시간대를 지정하고 싶을 때 변경합니다
  • 현재 TimeZone 정보 얻기
  • let timezone = TimeZone.current 
    
  • TimeZone Fabric 생성
  • let timezone = TimeZone(identifier: "Asia/Shanghai")
    
  • DateFormater의 TimeZone을 변경하면 해당 TimeZone에서 출력
  • DateFormatter


    DateFormater에는 데이터 스타일과 타임 스타일이 있습니다.
  • Locale의gregorian/jaJP로 설정된 출력
  • dateStyle
    출력
    .full
    2021년 3월 1일 월요일
    .long
    2021년 3월 1일
    .midium
    2021/03/01
    .short
    2021/03/01
    timeStyle
    출력
    .full
    일본 시간으로 15시 21분 30초.
    .long
    15:21:30 JST
    .midium
    15:21:30
    .short
    15:21
  • 날짜-문자열 변환(gregorian/ja JP)
  • let formatter = DateFormatter()
    formatter.calendar = Calendar(identifier: .gregorian)
    formatter.dateStyle = .long
    formatter.locale = Locale(identifier: "ja_JP")
    let date = Date()
    let dateStr = formatter.string(from: date)
    print(dateStr) // 2021年3月1日
    
  • 날짜-문자열 변환(japanes/ja JP)
  • let formatter = DateFormatter()
    formatter.calendar = Calendar(identifier: .japanese)
    formatter.dateStyle = .long
    formatter.locale = Locale(identifier: "ja_JP")
    let date = Date()
    let dateStr = formatter.string(from: date)
    print(dateStr) // 令和3年3月1日
    
  • 문자열 - 날짜 변환
  • let formatter = DateFormatter()
    formatter.calendar = Calendar(identifier: .gregorian)
    formatter.locale = Locale(identifier: "ja_JP")
    formatter.dateFormat = "yyyy年M月d日(EEEEE) H時m分s秒"
    let dateStr = "2021年3月1日(月) 10時10分10秒"
    let date = formatter.date(from: dateStr)
    print(date!) // 2021-03-01 10:10:10 +0000
    

    끝말


    틀렸거나 더 이렇게 하는 게 좋아요!만약 무슨 문제가 있으면 저에게 알려 주세요.
    다음은 참고한 문장을 총결해 보겠습니다.

    참고 자료


    https://qiita.com/rinov/items/bff12e9ea1251e895306
    https://qiita.com/eKushida/items/541a65800efe1ffc523f
    https://qiita.com/tamadeveloper/items/8e4f68d586cc5b0f9a5a
    https://qiita.com/mishimay/items/8d67b583dc6809b2baf5
    https://qiita.com/SaturnR7/items/ac304afee7358584b817

    좋은 웹페이지 즐겨찾기