сопоставить дату и таймер datePicker с датой и временем пользователей (swift3)

Мой код ниже создает средство выбора даты и выбирает дату и время. Все, что я хочу сделать, это когда дата и время выбора даты совпадают с датой и временем телефона пользователя, это напечатать строку «круто». Вот и все. Я прокомментировал строку, которая вызывает у меня проблемы.

import UIKit

var dateFormatter : DateFormatter!

let datePicker2 = UIDatePicker();
let date = Date()

class ViewController: UIViewController {

    @IBOutlet var dateLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()

        let datePicker : UIDatePicker = UIDatePicker(frame: CGRect(x: 0,y: 330,width: self.view.frame.size.width,height: 220))
        datePicker.datePickerMode = UIDatePickerMode.dateAndTime
        self.view.addSubview(datePicker)

        datePicker.addTarget(self, action: #selector(ViewController.change(_:)), for: UIControlEvents.valueChanged)

        dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "YYYY-MM-dd hh:mm"
    }

    @IBAction func change(_ sender : UIDatePicker)
    {
        dateLabel.text = dateFormatter.string(from: sender.date)
        ///print cool line; what I have does not work
        if dateLabel.text == String(describing: date){
            print("cool")

        }
    }
}

person Community    schedule 14.07.2017    source источник
comment
Почему datePicker2 и date объявлены вне класса, а не внутри класса?   -  person rmaddy    schedule 14.07.2017
comment
И ваш формат даты должен быть "yyyy-MM-dd HH:mm".   -  person rmaddy    schedule 14.07.2017
comment
@rmaddy не знал, что datePicker2 и дата должны быть внутри класса.   -  person    schedule 14.07.2017


Ответы (1)


Ваша основная проблема заключается в том, как вы сравниваете две даты. Вы должны использовать один и тот же форматировщик даты для преобразования обоих экземпляров Date в строки в одном и том же формате. Затем вы можете сравнить две строки.

@IBAction func change(_ sender : UIDatePicker)
{
    let pickerString = dateFormatter.string(from: sender.date)
    let nowString = dateFormatter.string(from: Date())

    dateLabel.text = pickerString
    if pickerString == nowString {
        print("cool")
    }
}

Вы также используете неправильный формат. Вам нужно "yyyy-MM-dd HH:mm". YYYY немного отличается. Вы всегда хотите использовать yyyy, если у вас нет четкой и конкретной необходимости использовать YYYY. И в течение часа вы хотите HH вместо hh. HH – это 24 часа, а 10 – 12 часов. Используйте только hh, если вы также используете a (для AM/PM).

И ваши свойства должны быть внутри класса, а не снаружи.

Переместите datePicker2 внутрь класса.

date теперь устарело, основываясь на моем ответе, поэтому вы можете полностью удалить его.

dateFormatter также следует переместить внутрь класса.

person rmaddy    schedule 14.07.2017
comment
это работает, если вы переместите datePicker на текущее время. Но если вы установите datePicker на время, а затем, когда текущее время соответствует datePicker, ничего не произойдет. Я пытаюсь сделать будильник, поэтому я хочу установить datePicker и напечатать что-то, когда оно соответствует текущей дате и времени. - person ; 14.07.2017
comment
Это совершенно отдельная часть функциональности, и для нее потребуется совершенно новый вопрос. Вопрос, который вы задали выше, заключается в том, как печатать круто, когда пользователь меняет средство выбора на текущее время. На этот вопрос был дан ответ. Если у вас есть совершенно другой вопрос о настройках сигналов тревоги и знании того, когда текущая дата/время совпадают с датой/временем, ранее выбранным пользователем, вы должны опубликовать новый вопрос со всеми соответствующими подробностями об этой проблеме. - person rmaddy; 14.07.2017