21968

[code]

     let jikanFormatter: NSDateFormatter = NSDateFormatter()
     jikanFormatter.timeZone = NSTimeZone(name: "GMT")
     jiknaFormatter.dateFormat = "H時間m分s秒"
    
     let date = dateFromString(array[1])
     let nokoriJikan = date!.timeIntervalSinceDate(NSDate())
     let nJString = NSDate(timeIntervalSince1970: nokoriJikan)
    
[/code]

といった具合に、差分をとった時間が減っていくというプログラムを組んだ時に、  
残り時間が一時間を切った際のフォーマットを"m分s秒"に変える方法がわかりません。

`jikanFormatter.stringFromDate`をStringの条件分岐で変えてみましたが適用できないみたいです。  
全体像はこちらのURLを参照していただければ、と思います。

[現在時間から任意の時間までの残り時間を出力するプログラム](https://ja.stackoverflow.com/questions/16780/%E7%8F%BE%E5%9C%A8%E6%99%82%E9%96%93%E3%81%8B%E3%82%89%E4%BB%BB%E6%84%8F%E3%81%AE%E6%99%82%E9%96%93%E3%81%BE%E3%81%A7%E3%81%AE%E6%AE%8B%E3%82%8A%E6%99%82%E9%96%93%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0)


CC BY-SA 3.0
2016-02-11T03:45:41.367
21965
2016-02-11T05:38:49.863
2017-04-13T12:52:39.113
-1
12254
question
ios swift objective-c
jikanFormattter.dateFormat = "h時間m分s秒"を表記が一時間を切った時に"m分s秒に変える"


久しぶりにNSDateFormatterのリファレンスを辿ってみましたが、特定の値が0の時に出力の一部分の文字列を完全に非表示にすると言った機能はなさそうです。また「残り時間」を表す値を無理に日付(時刻はその一部)を取り扱うNSDateFormatterで処理するというのにも無理があるように感じます。「NSDateFormatterで使える書式文字をそのまま使えるようにする」と言った要件がないのであれば、リンク先の回答にあるように剰余演算などを用いて、自前でフォーマッティングした方が良いのではないかと思います。

[code]

    extension NSTimeInterval {
        func format(hourFormat: String, _ minuteFormat: String, _ secondFormat: String) -> String {
            var seconds = Int(floor(self))
            var minutes = seconds/60
            seconds = seconds%60
            let hours = minutes/60
            minutes = minutes%60
            let ji = hours == 0 ? "" : String(format: hourFormat, hours)
            let fun = (hours == 0 && minutes == 0) ? "" : String(format: minuteFormat, minutes)
            let byo = String(format: secondFormat, seconds)
            return ji+fun+byo
        }
        static func fromString(hh_mm_ss: String) -> NSTimeInterval {
            let scanner = NSScanner(string: hh_mm_ss)
            //エラーは無視しています
            var hh: Int32 = 0
            scanner.scanInt(&hh)
            scanner.scanString(":", intoString: nil)
            var mm: Int32 = 0
            scanner.scanInt(&mm)
            scanner.scanString(":", intoString: nil)
            var ss: Int32 = 0
            scanner.scanInt(&ss)
            return NSTimeInterval(hh * 3600 + mm * 60 + ss)
        }
    }
    let nokoriJikan = NSTimeInterval.fromString("00:12:34")
    print(nokoriJikan.format("%ld時間","%ld分","%ld秒")) //->12分34秒
    let nokoriJikanOver1Hour = NSTimeInterval.fromString("01:23:45")
    print(nokoriJikanOver1Hour.format("%ld時間","%ld分","%ld秒")) //->1時間23分45秒
    
[/code]


CC BY-SA 3.0
2016-02-11T05:38:49.863
21968
2016-02-11T05:38:49.863
13972
21965
answer