获取两个日期的差异 - 斯威夫特
我无法获得日期差异函数的工作。它说NSDate
不能隐式转换为'日期',但我没有看到立即的工作;使用as Date
不起作用。获取两个日期的差异 - 斯威夫特
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.
}
}
更改您的所有NSDate
到Date
,然后用这个替换您的requestedComponent
:
let requestedComponent: Set<Calendar.Component> = [ .month, .day, .hour, .minute, .second]
您的区别是:
let timeDifference = userCalendar.dateComponents(requestedComponent, from: startTime, to: endTime!)
FYI:您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.
}
}
谢谢,你是什么意思我的dateFormatter不工作与此...? – Alex
@AlexAsher,在您的示例代码中,它将它作为“dd/MM/yy hh:mm:ss a”,它与您不匹配endTime“25/12/16 00:00:00”,因此您最终将与'nil'结束时间:) –
@AlexAsher如果它确实回答你的问题,你能否也接受它? ta –
难道你不能只是将'NSDate'替换为'Date',它们是非常相似的,如果不是相同的话。还有很多其他问题可以告诉您如何获取日期之间的差异 – Nik
我强烈建议使用ISO-8601日期格式,而不是DIY格式的字符串。 – alekop