티스토리 뷰
연말에 전혀 예상하지 못한 오류가 보고되었다.
유저는 분명 2023년 12월 31일을 선택했는데, 2024년 12월 31일 로 나오는 이슈가 있었다.
시간이 바뀌거나 하루 단위면 UTC 관련 이겠구나 싶었는데,
다른 날짜들은 모두 정상이였고,
연도가 바뀌는 현상은? 아무런 생각도 들지 않고 감도 못잡았다.
결론부터 말하자면, 간단한 오타에 의한 이슈였다.
DateFormatter
DateFormatter는 서비스 영역에서 너무나 자주 만나게되는 고마운 녀석이다.
"yyyyMMddHHmmss" 형식을 관례적으로 늘 자주 사용하다보니 dateFormat 이 문제일줄은 몰랐다.
눈을 씻고 기존에 (누군가) 작성해둔 코드를 찾아보니 yyyy가 소문자가 아닌 대문자 YYYY 로 되어 있었고,
여기서, yyyy 와 YYYY 는 다르다는 사실을 처음 알았다!
yyyy: 일반적인 우리가 늘 생각하는 연도
YYYY: 주 기반 연도(?)
주 기반 연도란
해당 주가 속한 연도를 출력한다.
2023년 12월의 달력을 보자
23년 12월 31일이 속한 날은 일요일이며, 월요일에 2024년이 시작된다.
주 기반 연도는 해당 주가 다음 연도에 하루라도 걸쳐있으면 다음연도로 친다.
31일이 속한 1월 첫주가 2024년이기 때문에 2024년으로 출력한것이다.
간단한 예제 코드로 만들어보았다.
func getDateFromString(_ dateString: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyyMMdd"
return dateFormatter.date(from: dateString)!
}
func getStringFromDate(date: Date, format: String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
return dateFormatter.string(from: date)
}
let date = getDateFromString("20231231")
let 그날짜 = getStringFromDate(date: date, format: "YYYY년 MM월 dd일")
print(그날짜)
20231231 의 날짜값을 넣은 뒤 YYYY년 MM월 dd일 로 출력을 하게 하면
[ 2024년 12월 31일 ] 이 출력된다.
YYYY년 MM월 dd일: 2024년 12월 31일
yyyy년 MM월 dd일: 2023년 12월 31일
이 현상은 2024년, 2025년 도 마찬가지이다..
2027년 12월 31일은 금요일이다. 토요일 단 하루만이 2028년에 속한다.
하지만 주 기반 연도는 이 상황에서도
let date = getDateFromString("20271231")
let 그날짜 = getStringFromDate(date: date, format: "YYYY년 MM월 dd일")
print(그날짜)
// 출력: 2028년 12월 31일
무려 2028년을 내뱉는다.
이렇게 주 기반 연도에 대해 알아보았지만, 아무리 생각해도 어디에 쓰는건지는 잘 모르겠다.
이렇게 알아보았으니 앞으로 틀리는 일은 없을것같다.
'iOS' 카테고리의 다른 글
[iOS] SwiftUI 그라데이션 응용하기 (Stepper) (0) | 2024.04.17 |
---|---|
[iOS] 오픈소스 기여를 해보았다. (2) | 2024.01.04 |
[iOS] Watch Connectivity 데이터 전송이 안될 때 (기타 이슈들) (0) | 2023.11.11 |
[iOS] FLO 앱 만들기(5) - 자동으로 스크롤 되는 가사 TableView (1) | 2023.10.21 |
[iOS] FLO 앱 만들기(4) - Seek 뷰와 기능 만들기 (0) | 2023.10.20 |
- Total
- Today
- Yesterday
- OAS
- SwiftUI
- auth
- Xcode15
- 애플워치 데이터 전송
- swift날짜
- 토큰
- TextField
- retry
- musicplayer
- IOS
- flo
- openapi-generator
- locale
- watchOS
- 소수점
- avplayer
- AVFoundation
- demical
- keyboardtype
- Swift
- Xcode
- easy cue
- DateFormatter
- watch connectivity
- 회고
- 2024년
- open-api-generator
- 애플워치
- KVO
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |