如何将文本字段中的字符串转换为NSDate类型?

时间:2016-06-21 20:05:18

标签: ios swift nsdate xcode7

我想要完成的任务:

我正在尝试创建一个输入按钮,检查UITextField中的日期以查看它是否在当前日期之前(今天的任何日期),如果UITextField中的日期是过去,我想要抛出错误/警告,告诉用户输入将来的日期 - 可能是当前日期的一周或一个月。

一点背景:

我创建了一个viewController,其中包含一个用户要输入的文本字段 日期和它的工作方式是用户按下textField和 弹出一个datePicker,允许他们使用datePicker更新textField。

我遇到的问题:

这一切正常,直到我想将textField中的日期与当前日期进行比较。这是因为textField中的日期是一个字符串,而不是NSDate可以识别的日期。

我的问题基本上是

  

如何将TextField中的字符串日期转换为NSDate可识别的格式?

这是我的enterButton函数的代码:

@IBAction func enterButton(sender: AnyObject) {

    let dateFormatter = NSDateFormatter()
    var raceDate = raceDateTextField.text
    let currentDate = NSDate()

    raceDate = dateFormatter.stringFromDate(sender.date)

    if currentDate.compare(raceDate) == NSComparisonResult.OrderedDescending {
        print("Race Date is earlier than Current Date")

    }
}

我收到了错误

  

无法转换类型'字符串的值?'预期参数类型' NSDate' @下面一行

if currentDate.compare(raceDate) == NSComparisonResult.OrderedDescending {
        print("Race Date is earlier than Current Date")

}

以下是我使用datePicker更新textField的代码,仅供参考:

@IBAction func textFieldEditing(sender: UITextField) {

    let datePicker:UIDatePicker = UIDatePicker()
    datePicker.datePickerMode = UIDatePickerMode.Date
    sender.inputView = datePicker
    datePicker.addTarget(self, action: #selector(SecondViewController.datePickerValueChanged), forControlEvents: UIControlEvents.ValueChanged)

}

func datePickerValueChanged(sender:UIDatePicker) {

    let dateFormatter = NSDateFormatter()
    dateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle
    dateFormatter.timeStyle = NSDateFormatterStyle.NoStyle
    raceDateTextField.text = dateFormatter.stringFromDate(sender.date)

}

我在逻辑上是否会犯这个错误? 任何有关这方面的帮助将不胜感激! :)

EDIT / UPDATE!

我做了改变,就像你们建议的那样,我在同一条线上得到同样的错误。

这是我更新的代码:

 @IBAction func enterButton(sender: AnyObject) {

    let dateFormatter = NSDateFormatter()
    var raceDate = raceDateTextField.text
    dateFormatter.dateFormat = "dd/MM/yyyy"
    var minimumDate: NSDate? = NSDate()
    raceDate = dateFormatter.stringFromDate(sender.date)

    if minimumDate!.compare(raceDate) == NSComparisonResult.OrderedDescending {
        print("Race Date is earlier than Current Date")

    }
}

我认为(sender.date)参数错误@ line:

  

raceDate = dateFormatter.stringFromDate(sender.date)

现在我想我输入了错误的参数(sender.date),因为raceDate仍然在 if 语句中显示为字符串数据类型。

5 个答案:

答案 0 :(得分:1)

Swift 3:

Cnum = 5
details = {}
for count in range(Cnum):
    Cnam = raw_input('Please enter the name of a citizen: ')
    Cage = int(raw_input('Please enter the age of this citizen: '))
    details[Cnam] = Cage
print details

答案 1 :(得分:0)

textField中当前的文本是一个String。您需要通过dateFormatter运行它并获取日期(NSDate)。之后,您可以将其与当前日期进行比较。

它基本上与在textField中设置文本时相同,但反过来。

请参阅:https://developer.apple.com/reference/foundation/nsiso8601dateformatter/1643127-datefromstring

答案 2 :(得分:0)

您说要将textField中的日期与当前日期进行比较。

因此,只需创建并设置日期选择器的最小日期即可。 var minimumDate: NSDate?

例如:

if minimumDate.compare(raceDate) == NSComparisonResult.OrderedDescending {
    print("Race Date is earlier than Current Date. Are you a time traveler?")
}

答案 3 :(得分:0)

@IBAction func enterButton(sender: AnyObject) {

   let myDate = raceDateTextField.text
   let dateFormatter = NSDateFormatter()
   dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
   let date = dateFormatter.dateFromString(myDate)!
   dateFormatter.dateFormat = "dd/MM/yyyy"
   let dateString = dateFormatter.stringFromDate(date)

}

答案 4 :(得分:0)

让它正常工作,感谢@Amit Jagesha,@tymac,@ Andrei Filip和@Leo Dabus

以下是其他人遇到类似问题并供将来参考的最终产品。

    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "MMM, dd, yyyy"
    let raceDate = raceDateTextField.text
    let date = dateFormatter.dateFromString(raceDate!)
    let minimumDate = NSDate()

    if minimumDate.compare(date!) == NSComparisonResult.OrderedDescending {
    }