所以我的代码所做的是从UIDaterPicker(timePicker)获取NSDate并更改时区。之后,它将转换回NSDate以启动NSTimer。
但是它在convertToDate函数中崩溃了。显然,似乎我试图强行打开一个可选项。但为什么它是可选的?
@IBOutlet weak var timePicker: UIDatePicker!
func convertTime() -> String {
let date = timePicker.date
print("date", date)
let myTimeZone = NSTimeZone.localTimeZone()
let df = NSDateFormatter()
df.timeZone = myTimeZone
df.dateFormat = "yyyy.MM.dd G 'at' HH:mm:ss zzz"
let time = df.stringFromDate(date)
return time
}
func convertToDate() -> NSDate {
let date = convertTime()
let dateformatter = NSDateFormatter()
let convertedTime = dateformatter.dateFromString(date)
return convertedTime!
}
func fireTime() -> NSDate {
let time = convertToDate().dateByAddingTimeInterval(60*60*2.4)
return time
}
func updateTimeLeft() {
let elapsedTime = fireTime().timeIntervalSinceDate(NSDate())
self.ringTime.text = NSDateComponentsFormatter().stringFromTimeInterval(elapsedTime)
}
timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: #selector(ViewController.updateTimeLeft), userInfo: nil, repeats: true)
答案 0 :(得分:1)
NSDateFormatter
返回一个可选项,因为并非每个字符串都代表一个有效的日期。可选性允许它优雅地回答“根据您告诉我使用的格式,这不是有效数据”。
func convertToDate() -> NSDate {
let date = convertTime()
let dateformatter = NSDateFormatter()
dateformatter .dateFormat = "INSERT DATE FORMAT HERE"
if let convertedTime = dateformatter.dateFromString(date) {
return convertedTime
}
else {
//formatting failed. Handle the error here
}
}
您还没有给它使用格式字符串,因此它不知道如何解析您的日期,因此它返回nil。
如果您发布数据示例,我会向您显示所需的格式字符串。