UIDatePicker减去确切时间 - Swift

ale*_*lex 5 nsdate ios nsdatepicker swift

我正在制作一个闹钟,它会告诉你你有多少小时和几分钟的睡眠时间.我设置了一个UIDatePicker用户选择他们想要醒来的时间.它还告诉了第二个确切的时间.我坚持的部分是他们将要睡多少小时.我试过基本上从中减去确切的时间UIDatePicker.如果它们都在AM中,这就有效.例如,如果用户想要在上午10:30醒来并且是上午9:30,那么您所要做的就是从9:30减去10:30以获得1小时.我很快意识到,如果它们是不同的时间,例如AM或PM,这将不起作用.

我如何从UIDatePicker获得时间

func handler(sender: UIDatePicker) {
        var timeFormatter = NSDateFormatter()
        timeFormatter.timeStyle = NSDateFormatterStyle.ShortStyle

        var strDate = timeFormatter.stringFromDate(theDatePicker.date)


    }
theDatePicker.addTarget(self, action: Selector("handler:"), forControlEvents: UIControlEvents.ValueChanged)
Run Code Online (Sandbox Code Playgroud)

我怎么得到了确切的时间

var date = NSDate()
var outputFormat = NSDateFormatter()
outputFormat.locale = NSLocale(localeIdentifier:"en_US")
outputFormat.dateFormat = "HH:mm:ss"
timeLabel.text = (outputFormat.stringFromDate(date))
var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("getTime"), userInfo: nil, repeats: true)
Run Code Online (Sandbox Code Playgroud)

我的问题:

如何UIDatePicker从准确的时间中减去用户获得的睡眠时间?

theff

Rob*_*Rob 12

您可以使用NSCalendar方法components:fromDate:toDate:options:,例如:

@IBAction func valueChangedForPicker(sender: UIDatePicker) {
    let now = NSDate()
    let wakeUpTime = sender.date

    let calendar = NSCalendar.currentCalendar()
    let components = calendar.components(.HourCalendarUnit | .MinuteCalendarUnit | .SecondCalendarUnit, fromDate: now, toDate: wakeUpTime, options: nil)

    println(String(format: "%02d:%02d:%02d", components.hour, components.minute, components.second))
}
Run Code Online (Sandbox Code Playgroud)

如果你得到负值,那是因为fromDate不是之前toDate.在这种情况下,如果您NSDatePicker只处理时间,您可能需要调整时间wakeUpTime以确保它在将来.

var wakeUpTime = datePicker.date

if wakeUpTime.compare(now) == .OrderedAscending {
    wakeUpTime = calendar.dateByAddingUnit(.DayCalendarUnit, value: 1, toDate: wakeUpTime, options: nil)!
}
Run Code Online (Sandbox Code Playgroud)


use*_*514 5

以下是Swift游乐场的示例:

// Setting up a date since I don't have a UIDatePicker
let dateString = "2014-11-12 07:25"
let dateFormatter: NSDateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm"

var wakeupTime: NSDate = dateFormatter.dateFromString(dateString)!
// var wakeupTime: NSDate = theDatePicker.date

let fromDate = NSDate()
let gregorianCalendar: NSCalendar = NSCalendar(calendarIdentifier: NSGregorianCalendar)!
let flags: NSCalendarUnit = .HourCalendarUnit | .MinuteCalendarUnit

let components = gregorianCalendar.components(flags, fromDate: fromDate, toDate: wakeupTime, options: NSCalendarOptions(0))

println("\(components.hour) hours, \(components.minute) minutes")
Run Code Online (Sandbox Code Playgroud)