9543


oyという文字列の中にグレゴリオ暦での年数が入っています  
例えばoyに"2015"と入っているとして下記のようなコードを書きました

[code]

    var date_string: String  = "\(oy)"
    println(oy)
    var date_formatter: NSDateFormatter = NSDateFormatter()
    date_formatter.locale     = NSLocale.currentLocale()
    date_formatter.dateFormat = "yyyy"
    var change_date:NSDate = date_formatter.dateFromString("\(oy)")!
    
    println("\(change_date)")
    
    let calendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)
    
    func getYear()->Int {
        let myCalendar = NSCalendar.currentCalendar()
        let myComponents = calendar!.components(.YearCalendarUnit, fromDate: change_date)
        let year = myComponents.year
        return year
    }
    
    tablesection.append("\(getYear())")
    
    oy++
    
[/code]

そうしたらiPhoneに設定された暦（今の設定は和暦になっています）に変換されるどころか4003と全く関係ない数字が表示されてしまいました  
どうすれば正しく変換されますか？


CC BY-SA 3.0
2015-04-25T06:55:12.210
9542
2015-04-25T08:21:18.850
2015-04-25T08:21:18.850
5519
9480
question
ios swift ios8
NSDateから和暦で年数だけ書き出したい


2015をiPhoneに設定されている和暦のカレンダーで変換しているためです。  
2015は西暦なので、そこから`NSDate`にする場合は西暦を使う必要があります。

そして、その`NSDate`から和暦に変換する際には、和暦のカレンダーを設定します。

たとえば次のように元のコードを修正します。

[code]

    var date_string: String  = "\(oy)"
    println(oy)
    var date_formatter: NSDateFormatter = NSDateFormatter()
    date_formatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
    date_formatter.locale     = NSLocale.currentLocale()
    date_formatter.dateFormat = "yyyy"
    var change_date :NSDate = date_formatter.dateFromString("\(oy)")!
    
    println("\(change_date)")
    
    func getYear()->Int {
        let myCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierJapanese)
        let myComponents = myCalendar!.components(.CalendarUnitYear, fromDate: change_date)
        let year = myComponents.year
        return year
    }
    
    println("\(getYear())")
    
[/code]


CC BY-SA 3.0
2015-04-25T07:57:35.513
9543
2015-04-25T07:57:35.513
5519
9542
answer