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

how to convert a date string into a NSDate type swift

我正在尝试获取 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)”之后强制转换,但我认为这不是正确的做法。

非常感谢您提供的任何帮助和见解!谢谢

您的代码运行良好,因此请检查您的文本字段中的值是否出现在您的变量中

  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

如果您让用户从 UIDatePicker 中选择日期,那么您和用户都会更轻松。这有很多优点:

  • 用户不必在三个文本字段中键入内容
  • 您可以通过 date 属性 获取 selected 日期。你不需要所有这些格式化程序和东西
  • 您可以通过 maximumDate 属性 设置用户可以 select 的最大日期。这样您就不必手动检查它是否在将来。只需将 maximumDate 设置为现在即可。
  • 日期选择器将根据用户的区域设置使用不同的格式。你完全不需要担心。

记得将 datePickerMode 设置为 .date

至于转换为NSDate,您可以通过以下表达式轻松完成:

datePicker.date as NSDate

如果你坚持使用三个文本字段,你可以这样做:

dateFormatter.date(from: dateString) as NSDate? // note that this produces an optional