[Swift] TimeZone 초기화 시 주의사항 [여름철]
TimeZone 초기화
일본 시간은 그리니치 표준시간인 GMT보다 +9시간이다.
swift의 Date형은 GMT 데이텀이기 때문에 Date 포맷기 등을 통해 문자열로 변환된 경우
TimeZone을 일본 시간으로 지정해야 합니다.
TimeZone 초기화는 identifier의 지정과 GMT로부터의 시간차에 따라 지정하는 방법이 있습니다.
아무래도 결과적으로 시간이 +9시간 조정되기 때문에 좋아하는 사람을 사용할 수 있다.
identifierTimeZone(identifier: "Asia/Tokyo")
GMTTimeZone(secondsFromGMT: 9 * 60 * 60) // 9時間分の秒数
TimeZone - Foundation | Apple Developer Documentation
https://developer.apple.com/documentation/foundation/timezone
TimeZone 동작 검증
계속 생각했어요.
실제로 각자의 지정에서 시간의 표현은 차이가 난다...
UIDatePicker에 설정된 시간을 레이블에 표시하고 확인합니다.
1970년 1월 1일
그러면 우선 UNIX 시간의 하한치인 1970년부터 시작합니다.1970/1/1 00:00:00
위의 레이블은 DatePicker에서 선택한 날짜를 DateFormatter에서 String으로 변환하는 것입니다.
표시 중입니다.
또한 DatePicker의 TimeZone은 identifier: "Asia/Tokyo"
에서 지정합니다.
날짜 형식은 secondsFromGMT: 9 * 60 * 60
에서 지정됩니다.
둘 다 +9시간 조정이기 때문에 표기는 물론1970/1/1 00:00:00
이다.
1955년 2월 24일
다시 시간을 거슬러 아이폰을 만들어 본 스티브 잡스의 생일.1955/2/24 00:00:00
이쪽도 문제 없어요1955/2/24 00:00:00
.
1951년 9월 8일
다음은 애플 본사 근처 샌프란시스코에 사과드리겠습니다.
우리는 샌프란시스코와 조약이 체결된 그날로 거슬러 올라갈 수 있다.1951/9/8 00:00:00
!!??
뭐랄까!!
태그로 변환 1951/9/7 23:00:00
일본 시간인데.
일본의 여름철
따라서 identifier
에서 및 secondsFromGMT
에서 지정
한 시간 차이가 났다.
실제로 1950년경 일본은 여름철을 채택했다
이런 차이가 생길 것 같습니다.
70년 전 일본에서 실시된'여름철'이 3년 안에 폐지된 이유
https://www.buzzfeed.com/jp/kotahatachi/summer-time-1948
구체적으로 identifier에서 지정한 경우 일본 이 지역에서 지정한 것이다.
한편, GMT에서 지정한 경우 표준시와의 시간 차이이기 때문에 일본의 정보는 없다.
따라서 여름철 조정은 없을 것 같다.
여름철
여름철의 구체적인 기간에 대해 국립천문대의wiki에서 총괄하였다.
연차
기간
년 (1948)
5/1 12:00 ~ 9/12 0:00
중화 24년 (1949)
4/2 12:00 ~ 9/11 0:00
년 (1950)
5/6 12:00 ~ 9/10 0:00
소화 26년(1951)
5/5 12:00 ~ 9/9 0:00
국립천문대 역법계산실
https://eco.mtk.nao.ac.jp/koyomi/wiki/BBFEB9EF2FB2C6BBFEB9EF.html identifier: "Asia/Tokyo"
에서 이 기간을 이용한 경우
여름철로 여겨질 때 한 시간 줄어든다.
(하계 기간이기 때문에 1시간을 추가해야 하는 전제에서 결과는 1시간을 뺀 값이다)
예전에는 2020년 도쿄올림픽을 위해 여름철을 도입하자는 논의가 있었다
실제로 이미 일본에서 채용된 실적이 있고 결국 그만두고 싶다는 의견이 많아 4년이면 끝난다...
왜 또 이걸 채택하고 싶으세요?
어쨌든 일본에는 여름철이 있기 때문이다
TimeZone 지정에 유의해야 한다고 합니다.
특별한 이유가 없다면 TimeZone 초기화 시 GMT
로 통일하는 것이 좋습니다.
이상한 문제로 고민하지 않아도 될지도 몰라요.
이번 실험의 View Controller 코드
ViewController.swift
import UIKit
class ViewController: UIViewController {
let adjustSecondsForJapan : TimeInterval = 9 * 60 * 60
@IBOutlet weak var datePicker: UIDatePicker!
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
setupDatePicker()
}
private func setupDatePicker() {
datePicker.datePickerMode = .date
datePicker.timeZone = TimeZone(identifier: "Asia/Tokyo")
datePicker.date = Date(timeIntervalSince1970: -adjustSecondsForJapan)
datePicker.locale = Locale(identifier: "ja-JP")
}
private func getDateStrings(from date: Date) -> String {
let formatter = DateFormatter()
formatter.timeZone = TimeZone(secondsFromGMT: Int(adjustSecondsForJapan))
formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
return formatter.string(from: date)
}
@IBAction func didChangeDatePicker(_ sender: UIDatePicker) {
label.text = getDateStrings(from: sender.date)
}
}
github
becky3/timezone_summertime_test: 일본 여름철 영향 확인 프로젝트
https://github.com/becky3/timezone_summertime_test
Reference
이 문제에 관하여([Swift] TimeZone 초기화 시 주의사항 [여름철]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/beckyJPN/items/a5c6612cc15b2596971e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
TimeZone(identifier: "Asia/Tokyo")
TimeZone(secondsFromGMT: 9 * 60 * 60) // 9時間分の秒数
계속 생각했어요.
실제로 각자의 지정에서 시간의 표현은 차이가 난다...
UIDatePicker에 설정된 시간을 레이블에 표시하고 확인합니다.
1970년 1월 1일
그러면 우선 UNIX 시간의 하한치인 1970년부터 시작합니다.
1970/1/1 00:00:00
위의 레이블은 DatePicker에서 선택한 날짜를 DateFormatter에서 String으로 변환하는 것입니다.
표시 중입니다.
또한 DatePicker의 TimeZone은
identifier: "Asia/Tokyo"
에서 지정합니다.날짜 형식은
secondsFromGMT: 9 * 60 * 60
에서 지정됩니다.둘 다 +9시간 조정이기 때문에 표기는 물론
1970/1/1 00:00:00
이다.1955년 2월 24일
다시 시간을 거슬러 아이폰을 만들어 본 스티브 잡스의 생일.
1955/2/24 00:00:00
이쪽도 문제 없어요
1955/2/24 00:00:00
.1951년 9월 8일
다음은 애플 본사 근처 샌프란시스코에 사과드리겠습니다.
우리는 샌프란시스코와 조약이 체결된 그날로 거슬러 올라갈 수 있다.
1951/9/8 00:00:00
!!??
뭐랄까!!
태그로 변환
1951/9/7 23:00:00
일본 시간인데.일본의 여름철
따라서 identifier
에서 및 secondsFromGMT
에서 지정
한 시간 차이가 났다.
실제로 1950년경 일본은 여름철을 채택했다
이런 차이가 생길 것 같습니다.
70년 전 일본에서 실시된'여름철'이 3년 안에 폐지된 이유
https://www.buzzfeed.com/jp/kotahatachi/summer-time-1948
구체적으로 identifier에서 지정한 경우 일본 이 지역에서 지정한 것이다.
한편, GMT에서 지정한 경우 표준시와의 시간 차이이기 때문에 일본의 정보는 없다.
따라서 여름철 조정은 없을 것 같다.
여름철
여름철의 구체적인 기간에 대해 국립천문대의wiki에서 총괄하였다.
연차
기간
년 (1948)
5/1 12:00 ~ 9/12 0:00
중화 24년 (1949)
4/2 12:00 ~ 9/11 0:00
년 (1950)
5/6 12:00 ~ 9/10 0:00
소화 26년(1951)
5/5 12:00 ~ 9/9 0:00
국립천문대 역법계산실
https://eco.mtk.nao.ac.jp/koyomi/wiki/BBFEB9EF2FB2C6BBFEB9EF.html identifier: "Asia/Tokyo"
에서 이 기간을 이용한 경우
여름철로 여겨질 때 한 시간 줄어든다.
(하계 기간이기 때문에 1시간을 추가해야 하는 전제에서 결과는 1시간을 뺀 값이다)
예전에는 2020년 도쿄올림픽을 위해 여름철을 도입하자는 논의가 있었다
실제로 이미 일본에서 채용된 실적이 있고 결국 그만두고 싶다는 의견이 많아 4년이면 끝난다...
왜 또 이걸 채택하고 싶으세요?
어쨌든 일본에는 여름철이 있기 때문이다
TimeZone 지정에 유의해야 한다고 합니다.
특별한 이유가 없다면 TimeZone 초기화 시 GMT
로 통일하는 것이 좋습니다.
이상한 문제로 고민하지 않아도 될지도 몰라요.
이번 실험의 View Controller 코드
ViewController.swift
import UIKit
class ViewController: UIViewController {
let adjustSecondsForJapan : TimeInterval = 9 * 60 * 60
@IBOutlet weak var datePicker: UIDatePicker!
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
setupDatePicker()
}
private func setupDatePicker() {
datePicker.datePickerMode = .date
datePicker.timeZone = TimeZone(identifier: "Asia/Tokyo")
datePicker.date = Date(timeIntervalSince1970: -adjustSecondsForJapan)
datePicker.locale = Locale(identifier: "ja-JP")
}
private func getDateStrings(from date: Date) -> String {
let formatter = DateFormatter()
formatter.timeZone = TimeZone(secondsFromGMT: Int(adjustSecondsForJapan))
formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
return formatter.string(from: date)
}
@IBAction func didChangeDatePicker(_ sender: UIDatePicker) {
label.text = getDateStrings(from: sender.date)
}
}
github
becky3/timezone_summertime_test: 일본 여름철 영향 확인 프로젝트
https://github.com/becky3/timezone_summertime_test
Reference
이 문제에 관하여([Swift] TimeZone 초기화 시 주의사항 [여름철]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/beckyJPN/items/a5c6612cc15b2596971e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
ViewController.swift
import UIKit
class ViewController: UIViewController {
let adjustSecondsForJapan : TimeInterval = 9 * 60 * 60
@IBOutlet weak var datePicker: UIDatePicker!
@IBOutlet weak var label: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
setupDatePicker()
}
private func setupDatePicker() {
datePicker.datePickerMode = .date
datePicker.timeZone = TimeZone(identifier: "Asia/Tokyo")
datePicker.date = Date(timeIntervalSince1970: -adjustSecondsForJapan)
datePicker.locale = Locale(identifier: "ja-JP")
}
private func getDateStrings(from date: Date) -> String {
let formatter = DateFormatter()
formatter.timeZone = TimeZone(secondsFromGMT: Int(adjustSecondsForJapan))
formatter.dateFormat = "yyyy/MM/dd HH:mm:ss"
return formatter.string(from: date)
}
@IBAction func didChangeDatePicker(_ sender: UIDatePicker) {
label.text = getDateStrings(from: sender.date)
}
}
github
becky3/timezone_summertime_test: 일본 여름철 영향 확인 프로젝트
https://github.com/becky3/timezone_summertime_test
Reference
이 문제에 관하여([Swift] TimeZone 초기화 시 주의사항 [여름철]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/beckyJPN/items/a5c6612cc15b2596971e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)