当我将从datePicker获取的日期字符串转换为NSDate时,我遇到了问题。
例如,如果我在日期选择器中选择日期为23/12/1990,然后将其转换为NSDate,则结果会有所不同。它显示1989-12-23 23:00:00 UTC。
当我发出POST请求时,我需要将日期作为三个字符串发送 - 一个用于一天,一个用于月份,另一个用于一年。 所以对于我的POST请求,我再次将我的NSDate转换为String。 结果如1989-12-24
我无法避免这样做,因为在我的模型中,dateOfBirth被设置为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])"
答案 0 :(得分:0)
您说结果是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
。