[Swift] 날짜를 얻고 차이를 내는 방법
이번에 만든 앱
소개
이번은 유닛 테스트에 대해 배우고 싶은 공부하고 있었던 곳 "Date 사용해 테스트 쓰면 좋겠다"라고 하는 어드바이스를 받았으므로 도전해 보면 Date에 관해서 상당히 공부가 되었으므로 정리해 보았습니다.
또한 UIKit과 SwiftUI 모두에서 써 보았으므로 UIKit은 Git에서 공개하고,이 기사에서는 주로 SwiftUI로 쓴 것을 게재하고 있습니다.
환경
· macOS Big Sur 12
· Xcode : 12.5
날짜 얻기
@State var dateText = ""
var body: some View {
VStack {
Button(action: {
let date = Date()
dateText = "\(date)"
}, label: {
Text("Button")
})
Text(dateText)
}
}
버튼을 누르면 현재의 일시를 취득해 표시한다.
Formatter를 사용하여 디스플레이 정의
단지 표시하는 것만으로 기본적으로 별로 사용하는 일은 없기 때문에 기본”Date 사용한다면 Formatter”정도의 기세로 필요한 생각이 든다.
시간과 분만을 표시시키고 싶은 경우는 아래와 같이(Button의 action내 이외는 생략)
let date = Date()
let dateFormat = DateFormatter()
dateFormat.dateFormat = "HH:mm"
dateText = dateFormat.string(from: date)
.dateFormat에서는 표시하는 일시의 표현을 정의할 수 있다. 하기 표에 정리하였다.
년
달
일
시간
분
초
YYYY
MM
dd
HH
mm
ss
2021
6
3
22
26
45
지역 및 언어의 경우 Locale 사용
dateFormat.locale = Locale(identifier: "jp_JP")
Locale에서 사용할 ID 목록 ↓
지역별 시간을 얻으려면 TimeZone 사용
dateFormat.timeZone = TimeZone(identifier: "Asia/Tokyo")
TimeZone에서 사용할 ID 목록↓
일본 달력에 조심하다
이것도 처음 몰랐던 부분이지만, iPhone의 설정으로 화력을 설정하고 있으면 YYYY의 기원 표시의 부분이 엉망인 숫자를 돌려주는 때가 있다.
위를 방지하려면
.timeStyle과 .dateStyle을 정의하는 것이 좋습니다.
let dateFormat = DateFormatter()
dateFormat.timeStyle = .full
dateFormat.dateStyle = .full
dateFormat.locale = Locale(identifier: "ja_jp")
let date = Date()
dateText = dateFormat.string(from: date)
Local을 en_US로 변경하면 표시가 다음과 같이 바뀝니다.
dateFormat.dateFormat = "YYYY/MM/dd HH:mm :ss"를 dateFormat.locale = Locale(identifier: "ko_kr") 아래에 추가하면 다음과 같이 표시됩니다.
시간 차이를 얻고 싶다면
timeIntervalSince를 사용하면 차이를 쉽게 얻을 수 있습니다.
@State var dateText = ""
@State var timeZone = ""
var body: some View {
VStack {
Button(action: {
let dateFormat = DateFormatter()
// 日時をString型で定義
let textLogDate = "2021-01-01 12:00:00"
let textNowDate = "2021-01-01 12:01:20"
dateFormat.timeStyle = .full
dateFormat.dateStyle = .full
// dateFormatを初期設定した"2021-01-01 12:00:00"と同じ形式になるように定義
dateFormat.dateFormat = "yyyy-MM-dd HH:mm:ss"
// localeを日本に
dateFormat.locale = Locale(identifier: "ja_JP")
// timeZoneを日本に
dateFormat.timeZone = TimeZone(identifier: "Asia/Tokyo")
// String型の日時をDate型に変換
timeZone = dateFormat.string(from: Date())
let logDate = dateFormat.date(from: textLogDate) ?? Date()
let nowDate = dateFormat.date(from: textNowDate) ?? Date()
// timeIntervalSinceを使用すると差分を取得できる->nowDate-logDate
let dateSubtraction: Int = Int(nowDate.timeIntervalSince(logDate))
dateText = "\(dateSubtraction)"
}, label: {
Text("Button")
})
Text(dateText)
Text(timeZone)
}
}
}
시간은 일본 시간을 표시하고 있어 취득한 차분은 초수의 차분이 되므로, 이번은 80초로 표시된다.
이상 앞으로를 사용하여 날짜와 시간의 차이를 얻는 앱을 만들어 단위 테스트를 작성해 보았습니다. (여기는 UIKit로 썼습니다)
htps : // 기주 b. 코 m / 유지 오카 / 치메 카 l
요약
그 이상 TimeZone과 Locale 목록과 timeIntervalSince를 사용하여 차이를 얻는 방법이었습니다.
Reference
이 문제에 관하여([Swift] 날짜를 얻고 차이를 내는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuujioka/items/87437716d23e700eb4d9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)