如何将日期字符串转换为 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
我正在尝试获取 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