Ios Swift日期选择器字符串到NSDate的转换减少1年
将从datePicker获取的日期字符串转换为NSDate时出现问题 例如,如果我在日期选择器中选择日期为23/12/1990,然后将其转换为NSDate,则结果不同。它显示的是世界协调时1989-12-23 23:00:00 当我发出POST请求时,我需要将日期作为三个字符串发送—一个表示日,一个表示月,另一个表示年。 因此,对于我的POST请求,我再次将NSDate转换为字符串。 结果是1989年12月24日 我无法避免这样做,因为在我的模型中,dateOfBirth被设置为NSDate,如果我更改,将会产生许多其他问题 最后,在POST请求成功后,我得到了我的日期、月份和年份字符串。。。我必须再次将其设置为NSDate。它给出的结果是-1989-12-24,与我从NSDate转换的字符串相同 有人能帮我解决这个问题吗 这是我在表单中单击“保存”时的代码-Ios Swift日期选择器字符串到NSDate的转换减少1年,ios,swift,nsdate,Ios,Swift,Nsdate,将从datePicker获取的日期字符串转换为NSDate时出现问题 例如,如果我在日期选择器中选择日期为23/12/1990,然后将其转换为NSDate,则结果不同。它显示的是世界协调时1989-12-23 23:00:00 当我发出POST请求时,我需要将日期作为三个字符串发送—一个表示日,一个表示月,另一个表示年。 因此,对于我的POST请求,我再次将NSDate转换为字符串。 结果是1989年12月24日 我无法避免这样做,因为在我的模型中,dateOfBirth被设置为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
而不是yyy
问题在于使用yyy
。这个问题每年都会出现。@rmaddy我想这两个问题都存在。@Sulthan:谢谢。。现在可以了,但当我填充文本字段的选择器视图时,它显示的日期比我的dateOfBirth字符串少一天。对不起,这个愚蠢的问题。我只是不知道我在做什么wrong@Sulthan@谢谢你救了我的命