当我将从 datePicker 获取的日期字符串转换为 NSDate 时遇到问题。
例如,如果我在日期选择器中选择日期为 23/12/1990,然后将其转换为 NSDate,则结果是不同的。它显示 1989-12-23 23:00:00 UTC。
当我发出 POST 请求时,我需要将日期作为三个字符串发送 - 一个表示日,一个表示月,另一个表示年。 因此,对于我的 POST 请求,我再次将 NSDate 转换为 String。 结果为 1989-12-24
我无法避免这样做,因为在我的模型中,出生日期设置为 NSDate,如果我更改它,将会产生许多其他问题。
最后,在 POST 请求成功后,我得到了日、月和年的字符串......我必须再次将其设置为 NSDate。结果为 - 1989-12-24 - 与我从 NSDate 转换的字符串相同。
谁能帮我解决这个问题吗?
这是我在表单中单击“保存”时的代码 -
var birthDate: NSDate?
if let dateOfBirthText = dateOfBirth.text {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd/MM/YYYY"
birthDate = dateFormatter.dateFromString(dateOfBirthText)
}
这是我在 POST 请求期间将此 NSDate 转换为字符串时的代码
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
var dateString = dateFormatter.stringFromDate(userPersonalData.dateOfBirth!)
let individualDateComponents = dateString.componentsSeparatedByString("-")
let dobYear = "\(individualDateComponents[0])"
let dobMonth = "\(individualDateComponents[1])"
let dobDay = "\(individualDateComponents[2])"
最佳答案
您说的结果是1989-12-23 23:00:00 UTC
。这意味着您想要使用 UTC 格式的日期。因此,您也必须将选择器的时区设置为 UTC。
以及您想要避免时区差异的任何地方......:
let utcTimeZone = TimeZone(secondsFromGMT: 0)
let datePicker: UIDatePicker = ...
datePicker.timeZone = utcTimeZone
let posixLocale = Locale(identifier: "en_US_POSIX")
let formatter = DateFormatter()
formatter.locale = posixLocale //you should really use this when encoding dates for API
formatter.timeZone = utcTimeZone
还要确保使用 yyyy
而不是 YYYY
。
关于ios - Swift Date Picker String 到 NSDate 的转换减少了 1 年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41450001/