2019年4月8日、iOS 12.3 beta2が開発者向けにリリースされました。
https://developer.apple.com/documentation/ios_release_notes/ios_12_3_beta_2_release_notes
上記リリースノートにある通り、令和に対応したバージョンです。
早速ダウンロードして色々試してみたところ、端末の日付が「2019/4/30以前」と「2019/5/1以降」で、Calendarコンポーネントの挙動が変わりました。
以下のサンプルコードで挙動を確認していて「へぇ」と思いました。
(実務ではレアな実装かと思いますが)
// 和暦の31/04/01を西暦に変換してみる
var comp = DateComponents()
comp.year = 31
comp.month = 4
comp.day = 1
let date = (Calendar.init(identifier: .japanese)).date(from: comp)
let formatter = DateFormatter()
formatter.locale = Locale.init(identifier: "ja_JP")
formatter.dateFormat = "yyyy/MM/dd"
print("\(formatter.string(from: date!))")
// 端末の日付が2019/4/30以前の場合、平成31年と判断され、"2019/04/01"となる。
// 端末の日付が2019/5/1以降の場合、令和31年と判断され、"2049/04/01"となる。
私は(何の根拠もなく)端末の日付設定とは無関係に「iOS 12.3にアップデート後は常に令和n年と判定される」と予想していたので、上記の挙動は予想外でした。
蛇足ですが、令和に未対応のiOS 12.2以前では、端末の日付が2019/4/30以前でも5/1以降でも、31年→2019年、32年→2020年になります。
平成までしかデータが入っていないので当たり前ですね。
環境:
Xcode 10.1
Swift 4.2
※ご注意
あくまでbetaでの情報ですので、最新の情報とは異なっている可能性があります。