我正在尝试采用 dd / mm / yyyy 格式的字符串并将其转换为NSDate,以便我可以存储生日。确认日期,月份和年份为真实日期(也不是将来的日期),因此我知道它们是正确的。用户将它们作为文本字段输入,我想我可以将dateString
设置为我希望的任何格式,这将有所帮助。
let day = dayTextField.text
let month = monthTextField.text
let year = yearTextField.text
let dateString = "\(day)/\(month)/\(year)"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
let birthdate: NSDate = dateFormatter.date(from: dateString) as NSDate
当我尝试将日期字符串转换为NSDate时,我的问题是最后一行,出现以下错误:
'Date?' is not convertible to 'NSDate'; did you mean to use 'as!' to force downcast?
我可以强制在“(from:dateString
)”之后进行强制转换,但是我认为这样做不正确。
我们将不胜感激您能提供的任何帮助和见解!谢谢
答案 0 :(得分:0)
您的代码工作正常,因此请检查文本字段中的值是否属于ur变量
let day = "10"
let month = "12"
let year = "2018"
let dateString = "\(day)/\(month)/\(year)"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"
let birthdate: NSDate = dateFormatter.date(from: dateString) as! NSDate
print(birthdate)
但是我建议您使用Date
而不是NSDate
。
答案 1 :(得分:0)
如果您让用户从UIDatePicker
中选择日期,则对您和用户来说都更加容易。这有很多优点:
date
属性获取所选日期。您不需要所有这些格式化程序和东西maximumDate
属性选择的最长时间。这样,您就不必手动检查将来是否会出现这种情况。只需将maximumDate
设置为现在即可。只需记住将datePickerMode
设置为.date
!
对于转换为NSDate
,您可以通过以下表达式轻松完成此操作:
datePicker.date as NSDate
如果您坚持使用三个文本字段,则可以执行以下操作:
dateFormatter.date(from: dateString) as NSDate? // note that this produces an optional