我想要完成的任务:
我正在尝试创建一个输入按钮,检查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)
}
我在逻辑上是否会犯这个错误? 任何有关这方面的帮助将不胜感激! :)
我做了改变,就像你们建议的那样,我在同一条线上得到同样的错误。
这是我更新的代码:
@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 语句中显示为字符串数据类型。
答案 0 :(得分:1)
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 {
}