如何将日期字符串转换为NSDate类型swift

时间:2018-09-13 04:03:40

标签: ios swift nsdate

我正在尝试采用 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)”之后进行强制转换,但是我认为这样做不正确。

我们将不胜感激您能提供的任何帮助和见解!谢谢

2 个答案:

答案 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