2017-07-14 157 views
0

我的代码如下创建一个日期选择器,并选择一个日期和时间。我想要做的就是当日期选择器的日期和时间匹配用户手机的日期和时间时,打印“酷”的线。而已。我评论了导致我出现问题的线路。匹配日期Picker日期和计时器与用户日期和时间(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") 

     } 
    } 
} 
+0

为什么'datePicker2'和'date'是在类之外而不是在类之内声明的? – rmaddy

+0

而你的日期格式应该是'“yyyy-MM-dd HH:mm”'。 – rmaddy

+0

@rmaddy不知道datePicker2和日期应该在课堂内。 –

回答

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而不是hhHH是一个24小时的小时,而hh是一个12小时的小时。只有使用hh,你也可以使用a(AM/PM)。

而你的属性应该在课堂内部,而不是外部。

在班级里面移动datePicker2

date现在基于我的回答已过时,因此您可以将其完全删除。

dateFormatter也应该在课堂内移动。

+0

如果将datePicker移动到当前时间,此功能将起作用。但是,如果您将datePicker设置为某个时间,并且当前时间与datePicker匹配,则什么都不会发生。我试图发出警报,所以我想设置datePicker并在匹配当前日期和时间时打印它。 –

+0

这是一个完全独立的功能,需要一个全新的问题。您上面提到的问题是,当用户将选择器更改为当前时间时,如何打印“很酷”。这个问题已经得到解答。如果您有关于设置闹钟的其他问题,并且知道当前日期/时间与用户以前选择的日期/时间相匹配,则应该发布一个包含该问题的所有相关详细信息的新问题。 – rmaddy