2016-09-21 4 views
2

機能する日付差機能を取得できません。 NSDateは暗黙的に '日付'に変換可能ではありませんが、この問題を直ちに回避することはできません。 as Dateを使用しても動作しません。2つの日付の違いを取得する - スウィフト

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var dateLabelOutlet: UILabel! 

    let currentDate = NSDate() 
    let dateFormatter = DateFormatter() 

    let userCalendar = NSCalendar.current 

    let requestedComponent: NSCalendar.Unit = [ 
     NSCalendar.Unit.month, 
     NSCalendar.Unit.day, 
     NSCalendar.Unit.hour, 
     NSCalendar.Unit.minute, 
     NSCalendar.Unit.second, 

    ] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    func printTime(){ 
     dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss a" 
     let startTime = NSDate() 
     let endTime = dateFormatter.date(from: "25/12/16 00:00:00") 

     let timeDifference = userCalendar.components(requestedComponent, from: startTime, to: endTime!, options: []) 

     dateLabelOutlet.text = "\(timeDifference.month) Months \(timeDifference.day) Days \(timeDifference.minute) Minutes \(timeDifference.second) Seconds" 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 
+0

「NSDate」を「Date」に置き換えることはできません。それらは非常によく似ています。日付の違いを得る方法を教えてくれるたくさんの質問があります – Nik

+0

DIY形式の文字列の代わりにISO-8601の日付形式を使用することを強くお勧めします。 – alekop

答えて

8

変更は、あなたのNSDateDateのすべては、これであなたのrequestedComponentを置き換える:

let requestedComponent: Set<Calendar.Component> = [ .month, .day, .hour, .minute, .second] 

あなたの違いは次のようになります。FYI

let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!) 

:あなたのdateFormatterは動作しませんこの "25/12/16 00:00:00" ここであなたのクラス全体が正しい形式になります:

class ViewController: UIViewController { 

    @IBOutlet weak var dateLabelOutlet: UILabel! 

    let currentDate = Date() 
    let dateFormatter = DateFormatter() 

    let userCalendar = Calendar.current 

    let requestedComponent: Set<Calendar.Component> = [.month,.day,.hour,.minute,.second] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    func printTime() { 
     dateFormatter.dateFormat = "dd/MM/yy hh:mm:ss" 
     let startTime = Date() 
     let endTime = dateFormatter.date(from: "25/12/16 00:00:00") 
     let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!) 

     dateLabelOutlet.text = "\(timeDifference.month) Months \(timeDifference.day) Days \(timeDifference.minute) Minutes \(timeDifference.second) Seconds" 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 
+0

ありがとう、私のdateFormatterがこれでうまくいかないのはどういう意味ですか? – Alex

+0

@AlexAsher、あなたのサンプルコードでは、 "dd/MM/yy hh:mm:ss a"という文字列があり、endTime "25/12/16 00:00:00"と一致しません。 'nil' endTime: –

+0

@AlexAsherもしあなたの質問に答えてもそれを受け入れることもできますか? ta –

関連する問題