LoginSignup
7
5

More than 3 years have passed since last update.

[Swift] [iOS] [令和] 和暦西暦変換は端末日付に依存する

Last updated at Posted at 2019-04-10

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での情報ですので、最新の情報とは異なっている可能性があります。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5